如何确保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并不通用
相关推荐
qq_12498707531 小时前
基于springboot的幼儿园家校联动小程序的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·spring·微信小程序·小程序
Alsn861 小时前
27.IDEA 专业版创建与打包 Java 命令行程序
java·ide·intellij-idea
毕设源码-郭学长1 小时前
【开题答辩全过程】以 基于JAVA的车辆违章信息管理系统设计及实现为例,包含答辩的问题和答案
java·开发语言
while(1){yan}1 小时前
UDP和TCP的核心
java·开发语言·网络·网络协议·tcp/ip·udp
麒qiqi1 小时前
【Linux 进程间通信】信号通信与共享内存核心解析
java·linux·算法
后端小张2 小时前
【Java 进阶】深入理解Redis:从基础应用到进阶实践全解析
java·开发语言·数据库·spring boot·redis·spring·缓存
柯南二号2 小时前
【后端】【Java】RabbitMQ / RocketMQ / Kafka / Redis 消息队列深度对比与选型指南
java·java-rocketmq·java-rabbitmq
木心爱编程2 小时前
【Qt 5.14.2 新手实战】QTC++入门筑基——10 分钟做个文本编辑器:QLineEdit + QTextEdit 核心用法
java·c++·qt
楠枬2 小时前
Nacos
java·spring·spring cloud·微服务
ShadowSmartMicros2 小时前
SpringAi调用Mcp
java·ai