1. 序言
-
最近的工作中,需要升级JDK版本到
17.0.7+
,以解决一个JDK bug:JDK-8299626 -
该bug的core dump关键字如下:
bashSIGSEGV in PhaseIdealLoop::build_loop_late_post_work
-
公司JDK团队提供的、包含JDK的基础镜像,有
aarch64
和x86_64
之分 -
因此,问题来了:根据宿主机的操作系统架构,应该选择哪个基础镜像?
2. 通过操作系统架构,选择合适的JDK版本
- 首先,根据不同的操作系统,使用不同方式确定系统架构
- 例如,对Linux或mac OS,使用
uname -m
查看系统架构。不同返回值的含义如下:- x86: 32 位 x86 架构(例如,Intel Pentium、AMD Athlon 等)
- x86_64: 64 位 x86 架构,也称为 AMD64 或 Intel 64 (例如,Intel Core 2 Duo、AMD Opteron 等)
- ia64: 64 位 Itanium 架构
- sparc: SPARC 架构(适用于 Solaris 操作系统)
- arm: ARM 架构
- aarch64: ARM 64 位架构
- 接着,如果是在社区下载open JDK,则可以根据系统架构,选择对应的JDK
- 例如,mac OS执行返回的架构信息如下,则在下载jdk-17.0.9+9时,选择
OpenJDK17U-jdk_aarch64_mac_hotspot_17.0.9_9.tar.gz
或OpenJDK17U-jdk_aarch64_mac_hotspot_17.0.9_9.pkg
3. 若JDK已安装,如何验证安装的版本是否与操作系统架构匹配?
方法1:查看JDK release文件
-
找到JDK的安装目录,也就是环境变量
JAVA_HOME
的值bash# linux系统 export | grep "JAVA_HOME"
-
进入JDK安装目录,查看release文件
bash# linux系统 cat release
-
看
OS_ARCH
是否与操作系统架构匹配 ------ 注意:OS_ARCH
是指 Java 运行时环境(JRE)的操作系统架构,而不是指操作系统本身的架构
方法2:使用命令 java -XshowSettings:properties -version
- 使用命令
java -XshowSettings:properties -version
,其打印的os.arch
更加具体,比如x86_64可以显示是amd64还是Intel 64
- 疑问: release中显示x86_64,而这里显示amd64。难道一个是JDK的系统架构,一个是操作系统本身的架构?欢迎大佬指点、交流
- 笔者目前认为:二者都是JDK的系统架构,只是
java -XshowSettings:properties -version
将x86_64架构具体到了amd64,以表明当前JDK可以适应adm64的操作系统架构
方法3:使用公司自创命令cat current_revision
(不具有普遍性)
- 同样地,找到JDK的安装目录,然后执行
cat current_revision
- 仔细查看该命令的输出后,笔者认为这应该是公司自创的命令,可能对大多数JDK并不通用