Tha*_*har 109 java macos apple-m1
是否需要特别发布 OpenJDK 来支持新的 Apple M1 芯片?
我看到目前有适用于 macOS/OS X 的 JDK 下载,但这些似乎只适用于 x86 处理器。那是对的吗?如果是这样,我在哪里可以下载 M1 的 OpenJDK 版本?
rzw*_*oot 72
是的。
在此页面上:AdoptOpenJDK 最新版本,您可以从“操作系统”下拉列表中选择“macOS”,然后从“架构”中选择,目前只有 x64,但很快就会有 AArch64 或 ARM64(这些通常是 64-位 ARM)。可能是因为苹果无疑在其 M1 设计中内置了大量扩展,因此苹果有自己的扩展。
如果您将操作系统保留在“任何”上,您会注意到 aarch64 在那里,这使您可以使用 ARM 处理器的 linux 版本。这(可能)不会在 M1 硬件上的 MacOS 上运行,但已经完成了 95% 的工作。
所以:它还没有,但请注意 ARM 的 JDK 已经可用了十年以上,虽然 JDK15 已经放弃了对一堆奇特的 OS/arch 组合(例如 solaris)的支持,但 ARM 开发人员始终至少保持部分相关性(即使到目前为止它主要是一个 oracle 商业许可证产品)。也就是说:创建一个原生运行在M1s上的adoptopenjdk版本不应该是一项艰巨的努力,所以想必,它会发生。但是,这是开源的努力,所以如果您感到焦虑,请务必阅读并做出贡献:)
直到 2020 年 11 月 10 日,Apple 才提供有关此架构的任何详细信息,除非您为它购买了一个 devkit 盒(带有 A14 芯片的 Apple mini,它不是 M1 芯片,但我猜它足够接近),并签署了一份大保密协议。
一般来说,如果你挥舞 NDA,开源项目会尽可能快地朝着相反的方向运行,所以如果你不喜欢这种状态,我认为抱怨采用 openjdk 或其他打包器和开源是不明智的关于它的项目:)
幸运的是,现在已经结束了,不再需要 NDA。我的假设是,一旦熟悉 openjdk 源代码的人有一个基于 M1 的 macos 系统来测试它,OpenJDK 源代码的 ARM 分支 + macos-x64 版本已经存在的 macos 位可以很容易地组合起来,这应该意味着应该在本月内发布一个采用 openjdk macos-aarch64 的版本。
但是,开源。你没有付钱给他们,你没有合同,他们也不欠你的。如果您希望它运行得更快,请捐款或贡献拉取请求。
更新:
Pha*_*inh 47
brew install openjdk
Run Code Online (Sandbox Code Playgroud)
就我而言,在MacBook Air (M1)上成功安装OpenJDK后,该命令仍然不起作用。我通过修复它java
brew info openjdk
Run Code Online (Sandbox Code Playgroud)
然后有一个像这样的命令
brew install openjdk
Run Code Online (Sandbox Code Playgroud)
执行这个命令,java
命令就起作用了。
Bor*_*nov 26
您可以使用 sdkman 安装 Java JDK(请参阅sdkman install):
vim .sdkman/etc/config
Run Code Online (Sandbox Code Playgroud)
设置sdkman_rosetta2_compatible=false
(参见sdkman 配置)
之后,您将看到与 M1 JDK 兼容的列表:
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
================================================================================
Run Code Online (Sandbox Code Playgroud)
选择一个并使用命令安装它sdk install java IDENTIFIER
,即:
sdk install java 8.0.292-zulu
小智 12
我正在使用 Azul OpenJDK 和 Netbeans 在新的 Apple M1 芯片上成功开发 Java 应用程序。
配置:zulu16.0.65-ea-jdk16.0.0-ea.24-macos_aarch64 Netbeans 12.1 和 maven。
tre*_*esf 11
命令行方法(感谢 Homebrew 团队以及分支@vladimir-kempik
上其他 openjdk 贡献者的辛勤工作JEP-391
)
# Install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install OpenJDK
brew install openjdk
Run Code Online (Sandbox Code Playgroud)
验证是否已安装:
$(brew --prefix openjdk)/bin/java --version
Run Code Online (Sandbox Code Playgroud)
验证它适用于 arm64 硬件:
file $(brew --prefix openjdk)/bin/java
# /opt/homebrew/opt/openjdk/bin/java: Mach-O 64-bit executable arm64
Run Code Online (Sandbox Code Playgroud)
注意:要在系统范围内安装 openjdk,请按照 Homebrew 提供的屏幕说明进行操作。
注意:在撰写本文时,Homebrew 可能声称它在 M1 上安装了不同版本的 OpenJDK。这是由于stable
Homebrew 中的打包规则,将随着时间的推移进行排序。
我尝试过 Azul JDK 8。
我只是想说,虽然 Azul JDK 在 Apple M1 上原生运行并且速度很快,但仍然存在问题。特别是当一些Java代码需要调用C++代码时。
例如,我是一名大数据开发人员。我开始在我的开发工作流程中使用 Azul JDK。但我注意到某些测试在切换后开始失败。例如,当测试写入Parquet / Avro文件时,它会失败。我认为这是因为有一些用 C++ 为 Parquet/Avro 编写的本机内容,并且它们不是为 M1 编译的。
由于这个具体原因,我被迫使用非 M1 JDK,它很慢。那里没有问题。
以下是我在 Azul 中遇到的错误示例,但在非 M1 JDK 中却没有遇到这种情况:
- 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)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它说: Cause: org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Mac and os.arch=aarch64
我用谷歌搜索了这个问题,他们说本机库是为Spark的更高版本编译的,不幸的是。
这让我非常沮丧,我现在想要一台 Windows 笔记本电脑,哈哈。在 M1 芯片上运行 Intel JDK 有时会很慢,我不希望这样。
当心!
更新: 他们发布了支持 M1 的新版本库,我在项目中更新了它们,一切正常,感谢上帝。有时,这些“本机代码错误”会以不同的异常表现出来,这是我必须处理的额外 PITA,而使用 Windows 笔记本电脑的同事则不需要处理它。有时错误可能有点不清楚,但如果您在错误日志中看到有关本机代码的内容,或者诸如“jna”或“jni”之类的单词,那么这是 M1 芯片的问题。
小智 7
我按照以下步骤操作,能够在MacBook Air (M1)上成功运行 JDK 16 :
\n我能够在我的 MacBook Air (M1) 上安装并成功运行它。
\n小智 6
您可以从以下位置下载 Liberica JDK:
https://bell-sw.com/pages/downloads/?os=macOS&architecture=ARM
在IntelliJ IDEA for M1 中,JetBrains 运行时也是本机的 (ARM64)。
小智 5
请前往 Azul 网站并下载 dmg
https://www.azul.com/downloads/zulu-community/?os=macos&architecture=arm-64-bit&package=jdk
这将被放置在库中,一旦 IntelliJ 识别它,它应该很好运行
归档时间: |
|
查看次数: |
133609 次 |
最近记录: |