如何检查Mac上安装的JDK是arm64还是amd64架构?
Apple Silicon Mac 上检查JDK架构的通用方法
在搭载M1/M2等Apple Silicon芯片的Mac上,可同时运行ARM64(arm)和AMD64(Intel)架构的JDK,以下是两种通用检查方式,适用于本地环境、脚本安装及Docker容器:
一、命令行检查
方法1:直接检查JDK二进制文件(最准确,跨环境通用)
使用file命令识别JDK核心二进制文件的架构,无需依赖Java自身输出:
file $(which java)
输出示例:
- ARM64架构JDK:
- Mac本地:
/usr/bin/java: Mach-O 64-bit executable arm64 - Linux Docker容器:
/usr/bin/java: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV)
- Mac本地:
- AMD64架构JDK(通过Rosetta运行):
- Mac本地:
/usr/bin/java: Mach-O 64-bit executable x86_64 - Linux Docker容器:
/usr/bin/java: ELF 64-bit LSB executable, x86-64, version 1 (SYSV)
- Mac本地:
方法2:通过Java内置命令输出(无需外部工具)
利用JVM的属性输出获取架构相关信息,适合无file命令的环境:
java -XshowSettings:properties -version 2>&1 | grep -E "(sun.arch.data.model|java.vm.name)"
输出解读:
- 若
java.vm.name包含AArch64或arm64,则为ARM64架构JDK - 若
java.vm.name包含x86_64,则为AMD64架构JDK sun.arch.data.model显示位数(64),需结合VM名称判断具体架构
二、Java程序内检查(禁止使用System.getProperty("os.arch"))
方法1:通过JVM版本与VM名称判断
读取JVM的版本信息和虚拟机名称,这些属性直接关联JDK自身架构,不受宿主系统干扰:
public class JdkArchChecker { public static void main(String[] args) { String vmName = System.getProperty("java.vm.name"); String vmVersion = System.getProperty("java.vm.version"); if (vmName.contains("AArch64") || vmVersion.contains("aarch64")) { System.out.println("JDK架构:ARM64 (aarch64)"); } else if (vmName.contains("x86_64") || vmVersion.contains("x86_64")) { System.out.println("JDK架构:AMD64 (x86_64)"); } else { System.out.println("无法识别的JDK架构:" + vmName + " | " + vmVersion); } } }
方法2:通过Runtime版本信息判断
利用Runtime.version()获取JDK的版本字符串,部分发行版会在其中包含架构标识:
import java.lang.Runtime.Version; public class JdkArchChecker { public static void main(String[] args) { Version jdkVersion = Runtime.version(); String versionStr = jdkVersion.toString(); if (versionStr.contains("aarch64")) { System.out.println("JDK架构:ARM64"); } else if (versionStr.contains("x86_64")) { System.out.println("JDK架构:AMD64"); } else { // 结合VM名称兜底判断 String vmName = System.getProperty("java.vm.name"); System.out.println("JDK架构:未知 | 版本信息:" + versionStr + " | VM名称:" + vmName); } } }
内容的提问来源于stack exchange,提问作者Paul Verest on LinkedIn
相关产品推荐
相关产品推荐

