uname -m是唯一可靠判断系统架构的命令,输出aarch64或x86_64直接决定JDK下载版本,ARM64设备必须用aarch64 JDK,混用会导致执行失败或静默降级。

先看 uname -m 输出结果再下载
系统架构不匹配是安装失败最常见原因,uname -m 是唯一可靠判断依据。别信“Mac是64位所以装x64”这种经验——M1/M2/M3 Mac 的 uname -m 输出一定是 aarch64,不是 x86_64;银河麒麟 V10 在飞腾/鲲鹏服务器上也是 aarch64,在兆芯/海光上才是 x86_64。
执行命令后按输出选包:
-
aarch64→ 下载带arm64、aarch64或linux-aarch64字样的 JDK(如openjdk-17.0.2_linux-aarch64_bin.tar.gz) -
x86_64→ 下载带x64、x86_64或linux-x64字样的 JDK(如temurin-17.0.2+8-jdk_x64_linux_hotspot.tar.gz) - 注意:有些发行版会标
musl(如linux-x64-musl),那是给 Alpine 用的,普通 CentOS/Ubuntu/麒麟请避开
ARM64 版本不能靠 Rosetta 或模拟器硬跑
macOS 上用 Rosetta 2 运行 x64 JDK 确实能启动 java -version,但实际运行 Spring Boot 或 Maven 编译时大概率卡死、OOM 或报 Illegal instruction。这不是配置问题,是 JIT 编译器生成的本地代码根本没法在 ARM 核心上执行。
Linux 服务器更直接:bash: /usr/lib/jvm/jdk-17/bin/java: No such file or directory —— 这个错误不是路径错了,是 ELF 头架构不匹配,系统内核拒绝加载。
所以:
- Apple Silicon Mac 必须用
arm64JDK,别省事 - 国产 ARM 服务器(飞腾 D2000、鲲鹏 920)必须用
aarch64JDK,和 Mac 是同一套 ABI - 即使你只跑纯 Java 字节码(无 JNI),JVM 自身仍需原生指令支持,ARM64 版本的 GC、线程调度、内存屏障都针对 ARM 指令做了优化
下载渠道里哪些链接明确对应 ARM64
主流 OpenJDK 发行版都支持 ARM64,但页面筛选项名称不统一,容易点错:
-
Adoptium Temurin:下载页选 “Architecture” →
aarch64(不是 “ARM”,也不是 “ARM32”) -
Azul Zulu:URL 参数含
&architecture=arm-64-bit,文件名含aarch64或macosx_aarch64 - Microsoft Build of OpenJDK:下载选项里写的是 “ARM64”,macOS 和 Linux 分开列,别选成 “x64”
- Oracle JDK:下载页下拉菜单选 “Linux AArch64” 或 “macOS ARM64”,注意不是 “Linux x64”
- 避坑:JDK 21+ 的某些早期构建版本 ARM64 支持不完整,优先选 LTS 版本(JDK 17、JDK 21)
$JAVA_HOME 路径里必须出现 aarch64 或 arm64
装完只是第一步,$JAVA_HOME 配错照样用不了。验证方法很简单:运行 echo $JAVA_HOME,路径中必须包含 aarch64 或 arm64 字样,例如:
- Mac:
/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home(Zulu 安装后自动注册,但需确认java_home -v列出的路径含aarch64) - 麒麟/Linux:
/usr/lib/jvm/jdk-17.0.2-aarch64或/usr/local/jdk-17.0.2(手动解压后,务必检查bin/java -version输出里的 build 字符串是否含aarch64)
如果 java -version 输出里 build 行写着 (build 17.0.2+8-aarch64) 或 (Zulu 17.32.13-CA-macos-aarch64),才算真正落地。否则就是环境变量指向了旧版或错架构 JDK,静默降级很难察觉。


















