• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
    • Questions
    • Teachers
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

2.1K
Views
Java/JDK para el chip Apple M1

¿Será necesario que haya una versión especial de OpenJDK para admitir el nuevo chip Apple M1 ?

Veo que actualmente hay descargas de JDK para macOS/OS X, pero parece que solo son para procesadores x86. ¿Es eso correcto? Si es así, ¿dónde puedo descargar una versión de OpenJDK para M1?

about 3 years ago · Santiago Trujillo
14 answers
Answer question

0

brew install openjdk

En mi caso, después de instalar openjdk con éxito en Mac M1, el comando java aún no funciona. lo arreglo por

 brew info openjdk

entonces hay un comando como

 For the system Java wrappers to find this JDK, symlink it with sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

Ejecute este comando y el comando Java funcionará

about 3 years ago · Santiago Trujillo Report

0

Puede instalar Java JDK usando sdkman (vea sdkman install ):

 vim .sdkman/etc/config

Establezca sdkman_rosetta2_compatible=false (consulte la configuración de sdkman )

Después de eso, verá una lista de JDK compatibles con M1:

 sdk list java ================================================================================ Available Java Versions ================================================================================ Vendor | Use | Version | Dist | Status | Identifier -------------------------------------------------------------------------------- Azul Zulu | | 16.0.1 | zulu | | 16.0.1-zulu | | 11.0.11 | zulu | | 11.0.11-zulu | | 8.0.292 | zulu | | 8.0.292-zulu BellSoft | | 16.0.1 | librca | | 16.0.1-librca | | 11.0.11 | librca | | 11.0.11-librca | | 8.0.292 | librca | | 8.0.292-librca Java.net | | 18.ea.3 | open | | 18.ea.3-open | | 18.ea.2 | open | | 18.ea.2-open | | 18.ea.1 | open | | 18.ea.1-open | | 17.ea.28 | open | | 17.ea.28-open | | 17.ea.27 | open | | 17.ea.27-open | | 17.ea.26 | open | | 17.ea.26-open | | 17.ea.25 | open | | 17.ea.25-open ================================================================================

Elija uno e instálelo usando el comando sdk install java IDENTIFIER , es decir:

sdk install java 8.0.292-zulu

about 3 years ago · Santiago Trujillo Report

0

Ahora, OpenJDK 17 de Oracle es compatible con el chip Apple M1. El estado de la JEP 391 es cerrado y entregado.

Puede descargar la compilación gratuita de código abierto macOS/AArch64 del JDK, versión 17 desde el sitio web oficial .

about 3 years ago · Santiago Trujillo Report

0

Seguí los pasos a continuación y pude ejecutar con éxito JDK 16 en Mac M1:

  1. Vaya a "Oracle.com"
  2. Vaya a Productos → Software → Java
  3. Haga clic en "Descargar Java ahora"
  4. Haga clic en "Descargar JDK"
  5. Seleccione "Instalador de macOS"
  6. Instalar JDK
  7. Pruebe con cualquier programa Java de muestra y esto debería funcionar para usted.

Pude instalar y ejecutar esto con éxito en mi Mac M1.

about 3 years ago · Santiago Trujillo Report

0

Estos son los pasos para instalar Oracle JDK 8 y ejecutarlo desde Rosetta : https://www.oracle.com/in/java/technologies/javase/javase-jdk8-downloads.html

  • Descarga la versión macOS x64
  • Al intentar instalar el paquete, recibirá un aviso para instalar Rosetta si aún no existe.
  • El resto de los pasos de instalación son como cualquier otro paquete.

Puede verificar si ha funcionado o no abriendo la terminal y escribiendo:

 java -version
about 3 years ago · Santiago Trujillo Report

0

Un enfoque de línea de comandos (gracias al equipo de Homebrew y al arduo trabajo de @vladimir-kempik y otros colaboradores de openjdk en la rama JEP-391 )

 # Install Homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # Install OpenJDK brew install openjdk

Verifica que esté instalado:

 $(brew --prefix openjdk)/bin/java --version

Verifique que sea para el hardware arm64:

 file $(brew --prefix openjdk)/bin/java # /opt/homebrew/opt/openjdk/bin/java: Mach-O 64-bit executable arm64

Nota: Para instalar openjdk en todo el sistema, siga las instrucciones en pantalla proporcionadas por Homebrew.

Nota: Al momento de escribir esto, Homebrew puede afirmar que está instalando una versión diferente de OpenJDK en M1. Esto se debe a reglas de empaquetado stable en Homebrew y se solucionará con el tiempo.

about 3 years ago · Santiago Trujillo Report

0

He probado el Azul JDK 8.

Solo quería decir que, si bien Azul JDK funciona de forma nativa en Apple M1 y su velocidad es excelente, todavía hay problemas. Especialmente cuando algún código Java necesita llamar al código C++.

Por ejemplo, soy un desarrollador de big data. Y comencé a usar Azul JDK para mi flujo de trabajo de desarrollo. Pero noté que ciertas pruebas comenzaron a fallar después del cambio. Por ejemplo, cuando la prueba escribe en un archivo Parquet / Avro , falla. Creo que se debe a que hay algunas cosas nativas escritas en C++ para Parquet/Avro y no están compiladas para M1.

Por esta razón específica, me veo obligado a usar el JDK que no es M1, que es lento. No hay problemas allí.

Aquí hay un ejemplo del error que recibo con Azul que no obtengo con los JDK que no son M1:

 - convert Base64 JSON back to rpo Avro *** FAILED *** org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 10.0 failed 1 times, most recent failure: Lost task 0.0 in stage 10.0 (TID 14, localhost, executor driver): org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Mac and os.arch=aarch64 at org.xerial.snappy.SnappyLoader.findNativeLibrary(SnappyLoader.java:331) at org.xerial.snappy.SnappyLoader.loadNativeLibrary(SnappyLoader.java:171) at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:152) at org.xerial.snappy.Snappy.<clinit>(Snappy.java:47) at org.apache.avro.file.SnappyCodec.compress(SnappyCodec.java:43) at org.apache.avro.file.DataFileStream$DataBlock.compressUsing(DataFileStream.java:358) at org.apache.avro.file.DataFileWriter.writeBlock(DataFileWriter.java:382) at org.apache.avro.file.DataFileWriter.sync(DataFileWriter.java:401) at org.apache.avro.file.DataFileWriter.flush(DataFileWriter.java:410) at org.apache.avro.file.DataFileWriter.close(DataFileWriter.java:433) at org.apache.avro.mapred.AvroOutputFormat$1.close(AvroOutputFormat.java:170) at org.apache.spark.internal.io.SparkHadoopWriter.close(SparkHadoopWriter.scala:101) at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$12$$anonfun$apply$5.apply$mcV$sp(PairRDDFunctions.scala:1145) at org.apache.spark.util.Utils$.tryWithSafeFinallyAndFailureCallbacks(Utils.scala:1393) at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$12.apply(PairRDDFunctions.scala:1145) at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$12.apply(PairRDDFunctions.scala:1125) at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87) at org.apache.spark.scheduler.Task.run(Task.scala:108) at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:335) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Driver stacktrace: at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1499) at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1487) at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1486) at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59) at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48) at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1486) at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:814) at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:814) at scala.Option.foreach(Option.scala:257) at org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:814) ... Cause: org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Mac and os.arch=aarch64 at org.xerial.snappy.SnappyLoader.findNativeLibrary(SnappyLoader.java:331) at org.xerial.snappy.SnappyLoader.loadNativeLibrary(SnappyLoader.java:171) at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:152) at org.xerial.snappy.Snappy.<clinit>(Snappy.java:47) at org.apache.avro.file.SnappyCodec.compress(SnappyCodec.java:43) at org.apache.avro.file.DataFileStream$DataBlock.compressUsing(DataFileStream.java:358) at org.apache.avro.file.DataFileWriter.writeBlock(DataFileWriter.java:382) at org.apache.avro.file.DataFileWriter.sync(DataFileWriter.java:401) at org.apache.avro.file.DataFileWriter.flush(DataFileWriter.java:410) at org.apache.avro.file.DataFileWriter.close(DataFileWriter.java:433)

Como puede ver, dice: Cause: org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Mac and os.arch=aarch64

Busqué en Google este problema y dijeron que, lamentablemente, la biblioteca nativa está compilada para una versión posterior de Spark .

Esto me frustró tremendamente, y quiero una computadora portátil con Windows ahora, LOL. Ejecutar un Intel JDK en el chip M1 puede ser lento a veces, y no quiero eso.

¡Ten cuidado!

Actualización: Sacaron nuevas versiones de sus librerías con soporte para M1, las actualicé en los proyectos y todo funciona, gracias a Dios. A veces, estos "errores de código nativo" se manifiestan con diferentes excepciones y este es un PITA adicional con el que tengo que lidiar, mientras que mis colegas en las computadoras portátiles con Windows no necesitan lidiar con eso. Los errores pueden ser un poco confusos a veces, pero si ve algo sobre el código nativo en el registro de errores, o palabras como "jna" o "jni", entonces es un problema del chip M1.

about 3 years ago · Santiago Trujillo Report

0

Puede descargar el JDK de Liberica desde:

https://bell-sw.com/pages/downloads/?os=macOS&architecture=ARM

En IntelliJ IDEA para M1, JetBrains Runtime también es nativo (ARM64).

about 3 years ago · Santiago Trujillo Report

0

Vaya al sitio de Azul y descargue el archivo .dmg:

https://www.azul.com/downloads/zulu-community/?os=macos&architecture=arm-64-bit&package=jdk

Esto se colocará en una biblioteca y una vez que IntelliJ IDEA lo identifique, debería estar listo para ejecutarse.

about 3 years ago · Santiago Trujillo Report

0

Azul ofrece compilaciones macOS ARM de OpenJDK en su sitio web en la sección de Descargas . Sin embargo, aún no los he probado, pero Azul ha sido desarrollador de JDK durante mucho tiempo.

Una vez que descomprime el JDK de Azul, tiene que hurgar en su interior hasta encontrar el directorio zulu-11.jdk (suponiendo que haya descargado JDK 11), que luego copia en /Library/Java/JavaVirtualMachines .

about 3 years ago · Santiago Trujillo Report

0

Estoy desarrollando con éxito aplicaciones Java en el nuevo chip Apple M1 con Azul OpenJDK y NetBeans.

Configuración:

  • zulu16.0.65-ea-jdk16.0.0-ea.24-macos_aarch64
  • NetBeans 12.1 y Maven.
about 3 years ago · Santiago Trujillo Report

0

No es solo JEP-391.

Hay una rama de vista previa, https://github.com/openjdk/jdk-sandbox/tree/JEP-391-branch , uno puede construir JDK 16 de acceso temprano (EA) usando compilación cruzada en Intel Mac o directamente en ARM Mac. Y funciona bien.

about 3 years ago · Santiago Trujillo Report

0

Microsoft y Azul parecen ser los principales impulsores de JEP 391 en combinación con el puerto de Windows (JEP 388). Tienen un repositorio de GitHub separado que en realidad tiene una versión de EA para macOS-aarch64.

No estoy seguro de cuál es la relación exacta con el repositorio de OpenJDK.

about 3 years ago · Santiago Trujillo Report

0

Si.

En esta página: Últimos lanzamientos de AdoptOpenJDK , puede seleccionar 'macOS' en el menú desplegable 'Sistema operativo', y luego en 'Arquitectura', actualmente es solo x64, pero pronto debería haber AArch64 o ARM64 (esos son generalmente los códigos cortos para 64- bit ARM). Posiblemente, ya que Apple sin duda tiene un montón de extensiones integradas en sus diseños M1, y Apple obtiene las suyas propias.

Si, en cambio, deja Sistema operativo en 'cualquiera', notará que aarch64 está allí, y esto lo lleva a una versión de Linux para procesadores ARM. Eso (probablemente) no se ejecutará en macOS en hardware M1, pero eso es el 95% del trabajo ya realizado.

Entonces: aún no está allí, pero tenga en cuenta que los JDK para ARM han estado disponibles durante más de una década, y aunque JDK 15 ha dejado de admitir un montón de combinaciones exóticas de SO/arquitectura (como Solaris ), el desarrollo de ARM siempre se ha mantenido al menos parcialmente relevante (incluso si hasta ahora es principalmente una oferta de licencia comercial de Oracle). Es decir: no debería ser un esfuerzo hercúleo crear una versión de adoptopenjdk que se ejecute en M1 de forma nativa, por lo que, presumiblemente, sucederá. Pero es un esfuerzo de código abierto, así que si estás ansioso, por supuesto, lee y contribuye :)

Apple no ha dado ningún detalle sobre esta arquitectura hasta el 10 de noviembre de 2020, a menos que haya comprado una caja de kit de desarrollo (una Mac Mini con un chip A14, que no es un chip M1, pero supongo que lo suficientemente cerca), y firmado un gran acuerdo de confidencialidad .

Como regla general, los proyectos de código abierto se ejecutarán lo más rápido posible en la dirección opuesta si agita un NDA, por lo que si no le gusta este estado de cosas, no creo que sea prudente quejarse de adoptopenjdk u otros empaquetadores y código abierto. proyectos al respecto :)

Afortunadamente, ahora está fuera y ya no se requiere un NDA. Mi suposición es que la rama ARM del código fuente de OpenJDK + los bits de macOS que ya existen para la versión macOS x64 se pueden combinar con bastante facilidad una vez que alguien familiarizado con el código fuente de OpenJDK tiene un sistema macOS basado en M1 para probarlo. , lo que debería significar que debería haber una versión de adoptopenjdk macos-aarch64 dentro de un mes.

Pero, de código abierto. No les pagaste, no tienes contrato y no te lo deben. Done al esfuerzo o contribuya con una solicitud de extracción si desea que sea más rápido.

ACTUALIZAR:

  • Construcciones M1 OpenJDK de Azul
  • El repositorio fuente GitHub de Microsoft (sí, en serio) para una compilación OpenJDK16 de acceso temprano para macOS en AArch64. Tenga en cuenta que Microsoft ha estado trabajando en la rama OpenJDK de AArch64 (para Windows 10 basado en ARM) durante un tiempo, lo que se remonta a: Gran parte del trabajo duro ya estaba hecho.
about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error