推荐使用 SDKMAN 安装 GraalVM JDK 21,它自动配置环境变量、支持多版本共存与安全切换,适配 Apple Silicon(arm64)和 Intel(x86_64)芯片,避免 Rosetta 2 转译导致的 illegal instruction 错误;手动解压至 /Library/Java/JavaVirtualMachines 虽可行,但不利于日常频繁切换及长期维护。

macOS 安装 GraalVM JDK 21 推荐使用 SDKMAN 管理,它能自动处理环境变量、支持多版本共存、切换安全便捷,避免手动配置出错或残留问题。直接解压到 /Library/Java/JavaVirtualMachines 虽然可行,但不利于日常开发中频繁切换 JDK(比如 Spring Boot 3.2+ 项目用 JDK 21,老项目仍需 JDK 17),也不适配 Apple Silicon(M 系列)与 Intel(x64)芯片的版本区分。
确认系统架构并选择对应安装包
先运行命令识别你的 Mac 芯片类型:
-
arch→ 输出arm64表示 M 系列芯片(如 M1/M2/M3/M4) -
arch→ 输出x86_64表示 Intel 芯片
对应下载链接(以 GraalVM CE 为例,免费且功能完整):
-
M 系列(arm64):
graalvm-jdk-21_macos-aarch64_bin.tar.gz -
Intel(x64):
graalvm-jdk-21_macos-x64_bin.tar.gz
⚠️ 注意:不要混用。在 M 系列 Mac 上运行 x64 版本会通过 Rosetta 2 转译,性能下降且可能触发 illegal instruction 错误。
用 SDKMAN 一键安装 GraalVM JDK 21
SDKMAN 是 macOS 上管理 JDK 的事实标准工具,已原生支持 GraalVM 所有主流发行版(包括 Oracle GraalVM EE 和 GraalVM CE)。
- 安装 SDKMAN(如未安装):
curl -s "https://get.sdkman.io" | bash
然后执行:source "$HOME/.sdkman/bin/sdkman-init.sh" - 刷新可用版本列表:
sdk list java - 查找 GraalVM JDK 21 版本(通常含
graalvm或vm标识):
例如:21.0.2-grl(GraalVM CE)、21.0.2.r21-grl(带 Java 21 运行时标识) - 安装:
sdk install java 21.0.2-grl - 设为默认:
sdk default java 21.0.2-grl
✅ 完成后自动配置 JAVA_HOME 和 PATH,新开终端即可用 java -version 验证,输出应包含 GraalVM 和 21 字样。
验证 GraalVM 核心能力是否就绪
安装成功后,还需确认 Native Image 工具链已就位(这是 GraalVM 区别于普通 JDK 的关键):
- 检查 native-image 是否可用:
native-image --version
若提示command not found,说明未安装组件 - 安装 native-image(CE 版本需手动启用):
gu install native-image - (可选)安装其他语言支持,如 JavaScript:
gu install js
? 提示:gu(GraalVM Updater)是 GraalVM 自带的组件管理工具,所有操作均在当前 SDKMAN 管理的 JDK 下生效,不影响其他版本。
(备用)手动安装路径说明(仅限特定场景)
若因企业策略必须手动部署(如需设为系统级默认 JDK):
- 解压下载包:
tar -xzf graalvm-jdk-21_*.tar.gz - 移动到系统 JDK 目录(需管理员权限):
sudo mv graalvm-jdk-21* /Library/Java/JavaVirtualMachines/ - 查看已安装 JDK 列表:
/usr/libexec/java_home -V
你会看到类似:Matching Java Virtual Machines (3):<br>21.0.2-grl, x86_64: "GraalVM CE 21.0.2" /Library/Java/JavaVirtualMachines/graalvm-jdk-21.0.2/Contents/Home
- 手动设置全局
JAVA_HOME(不推荐长期使用):export JAVA_HOME=$(/usr/libexec/java_home -v21 -sgraalvm)
建议只在临时脚本或 CI 环境中使用。
手动方式适合一次性构建任务,但日常开发中请优先信任 SDKMAN —— 它让 JDK 21 + GraalVM 的体验真正“开箱即用”。


















