1. 序言
- 最近的工作中,需要升級JDK版本到
17.0.7+
,以解決一個JDK bug:JDK-8299626 - 該bug的core dump關鍵字如下:
SIGSEGV 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
的值# linux系統 export | grep "JAVA_HOME"
-
進入JDK安裝目錄,查看release文件
# 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并不通用