最近需要在 ARM Mac 上装 Java 8,研究了一圈发现直接用 Azul Zulu 的原生 ARM 版本最省事。

快速安装

直接上命令:

# 添加 cask-versions 仓库
brew tap homebrew/cask-versions

# 安装 Zulu 8
brew install --cask zulu8

装完之后 JDK 在 /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home

如果需要设置 JAVA_HOME,在 ~/.zshrc~/.bashrc 里加上:

export JAVA_HOME='/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home'

验证一下:

java -version

应该能看到类似这样的输出:

openjdk version "1.8.0_xxx"
OpenJDK Runtime Environment (Zulu 8.xx.x.x-CA-macosx-aarch64)
OpenJDK 64-Bit Server VM (Zulu 8.xx.x.x-CA-macosx-aarch64)

注意输出里的 aarch64,说明这是 ARM 原生版本。

Oracle JDK vs OpenJDK

顺便说一下为什么选 OpenJDK 而不是 Oracle JDK。

从授权角度看,Oracle JDK 从 2019 年开始收费,2023 年还改成按员工数计费。OpenJDK 是完全免费的开源项目,由 Oracle、Red Hat 和社区一起维护。

技术上,从 Java 11 开始两者用的是同一套代码,功能和性能基本没区别。

所以对于 Java 8 来说,用 OpenJDK 的发行版(比如 Zulu)就行,既省钱又不影响使用。

为什么用 Zulu 的 ARM 原生版本

这个方案是从 Stack Overflow 这个回答 里看到的。

之前可能会想到用 Rosetta 2 跑 x86 版本的 JDK 8,但现在不太建议这么做:

  1. 性能问题:Rosetta 2 毕竟是转译层,原生 ARM 跑起来肯定更快
  2. 兼容性风险:根据 Apple 的开发者文档,macOS 28(预计 2027 年发布)会大幅缩减 Rosetta 2 的支持范围,到时候只会保留给一些老游戏用。现在如果用 x86 版本,以后可能会遇到麻烦

直接用 ARM 原生版本,一步到位。

小结

ARM Mac 装 Java 8,用 Azul Zulu 的 ARM 原生版本就好。简单直接,也不用担心以后的兼容性问题。