如何确保JDK版本与操作系统架构匹配?

1. 序言

  • 最近的工作中,需要升级JDK版本到17.0.7+,以解决一个JDK bug:JDK-8299626

  • 该bug的core dump关键字如下:

    bash 复制代码
    SIGSEGV in PhaseIdealLoop::build_loop_late_post_work
  • 公司JDK团队提供的、包含JDK的基础镜像,有aarch64x86_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.gzOpenJDK17U-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并不通用
相关推荐
艾伦~耶格尔1 小时前
【数据结构进阶】
java·开发语言·数据结构·学习·面试
爪洼传承人1 小时前
18- 网络编程
java·网络编程
smileNicky1 小时前
SpringBoot系列之从繁琐配置到一键启动之旅
java·spring boot·后端
祈祷苍天赐我java之术2 小时前
Java 迭代器(Iterator)详解
java·开发语言
David爱编程2 小时前
为什么必须学并发编程?一文带你看懂从单线程到多线程的演进史
java·后端
我命由我123452 小时前
软件开发 - 避免过多的 if-else 语句(使用策略模式、使用映射表、使用枚举、使用函数式编程)
java·开发语言·javascript·设计模式·java-ee·策略模式·js
long3162 小时前
java 策略模式 demo
java·开发语言·后端·spring·设计模式
摇滚侠2 小时前
HTML <iframe> 标签 如何把html写入iframe标签
java
云间月13143 小时前
飞算JavaAI:从智能调度到出行服务的全链路技术升级
java·redis·飞算javaai炫技赛
不太可爱的叶某人5 小时前
【学习笔记】Java并发编程的艺术——第6章 Java并发容器和框架
java·笔记·学习