如何查看JDK是为什么架构构建的? / mac上安装的JDK是针对arm(又名arm64)还是针对Intel CPU(又名amd64)?

问题描述 投票:0回答:2

因为在 Apple M1、M2 ...(Apple Silicon)上,可以同时安装适用于arm(又名arm64)或Intel CPU(又名amd64)的JDK,并且它会正常工作,有问题要告诉(to其他 mac 上的同事)如何检查

如何检查mac上安装的JDK是针对arm64还是amd64?

  1. 从命令行?
  2. 从 Java 程序内部? (不是操作系统架构
    System.getProperty("os.arch")

例如

mvn -v
曾经足以讲述所有细节。

mvn -v
Apache Maven 3.9.1 (2e178502fcdbffc201671fb2537d0cb4b4cc58f8)
Maven home: /opt/homebrew/Cellar/maven/3.9.1/libexec
Java version: 17.0.6, vendor: Amazon.com Inc., runtime: /Users/user/Library/Java/JavaVirtualMachines/corretto-17.0.6-1/Contents/Home
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "13.4", arch: "aarch64", family: "mac"

JDK java/javac 也没有给出线索。

javac -version
javac 17.0.6

java -version
openjdk version "17.0.6" 2023-01-17 LTS
OpenJDK Runtime Environment Corretto-17.0.6.10.1 (build 17.0.6+10-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.6.10.1 (build 17.0.6+10-LTS, mixed mode, sharing)

我们还通过脚本安装了JDK,JDK安装在docker容器中。 应该有一些通用的方法来检查。

java macos arm x86-64 apple-m1
2个回答
3
投票

如果您只需要手动检查,则可以使用

file
实用程序,对于可执行文件,该实用程序应该告诉您二进制文件是针对什么架构构建的。

因此,假设您想了解路径上的

javac
,您可以运行

file $(which javac)

或者,更一般地说

file /path/to/your/binary

并读取其输出。

一个例子:

$ file $JAVA_HOME/bin/javac

/Users/user/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/bin/javac:Mach-O 64 位可执行文件 x86_64

$ file $JAVA_OTHER_HOME/bin/javac

/Users/user/Library/Java/JavaVirtualMachines/corretto-1.8.0_362-1/Contents/Home/bin/javac:Mach-O 64 位可执行文件arm64


0
投票

在 macOS 14 及更高版本上,最简单的方法是使用命令:

/usr/libexec/java_home -V

答案会是这样的

Matching Java Virtual Machines (1):
    21.0.1 (arm64) "Eclipse Adoptium" - "OpenJDK 21.0.1" /Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home

所以:

21.0.1
-> 版本
arm64
-> 架构 (Apple Silicon)
Eclipse Adoptium
-> 分布

© www.soinside.com 2019 - 2024. All rights reserved.