首页 > 解决方案 > Java SDK 在 Mac M1 上报告错误的架构

问题描述

我有一个奇怪的java问题。我正在开发 MacBook Air 并做一些 Java 开发工作。我需要我的代码来执行以下操作:

// pseudo code
if (intel) {
   // Load docker 
} else if (arm) {
   // Load ARM docker
}

它适用于 Intel 和基于 Linux 的 ARM 架构。但对于我的 M1 MacBook Air,它报告操作系统是Mac OS X,但架构报告为x86. 由于最后一个问题,我无法区分 ARM 和 Intel 机器。

这是我正在运行的 JDK 版本。我觉得我在这里遗漏了一些东西,但是有什么方法可以编写此代码,以便我可以确定代码是在 M1 还是 Intel 上运行?

 ~ java --version
openjdk 11.0.12 2021-07-20 LTS
OpenJDK Runtime Environment Zulu11.50+19-CA (build 11.0.12+7-LTS)
OpenJDK 64-Bit Server VM Zulu11.50+19-CA (build 11.0.12+7-LTS, mixed mode)
(base) ➜  ~ java -XshowSettings 2>&1 | grep "  os."
    os.arch = x86_64
    os.name = Mac OS X
    os.version = 11.5

标签: javamacosjava-8java-11

解决方案


这可能是因为您实际上是在 M1 Macbook 上通过 Rosetta 运行 x86_64 Java VM。至少 AdoptOpenJDK 甚至不提供 Java 11 的原生 m1 版本。对于 Java 17,有可用的原生 aarch64 版本:https ://adoptium.net/releases.html?variant=openjdk17&jvmVariant=hotspot

在与地图捆绑的活动监视器应用程序中,您可以验证应用程序(“进程”)是否在本机运行与在Rosetta 2下运行。找到您的进程,可能命名为java,然后查看Kind列。原生应用说Apple,而 Rosetta 2 下的应用说Intel.

在此处输入图像描述


推荐阅读