jvm Java 17和Java 8之间的System.getProperty(“os.arch”)不同

oxalkeyp  于 7个月前  发布在  Java
关注(0)|答案(2)|浏览(104)

我有这个方法

static String getArchSuffix() {
    String arch = System.getProperty("os.arch");
    if (arch.equals("i686")) {
        return "x86";
    } else if (arch.equals("amd64")) {
        return "x86_64";
    } else if (arch.equals("nacl")) {
        return "armv7l";
    } else if (arch.equals("aarch64")) {
        return "armv7l";
    }
    return arch;
}

在Java 8中,它在我的MacBook Pro M2上运行得很好。
结果是:

arch = x86_64

迁移到Java 17之后,

arch = aarch64

我希望这两个版本有相同的行为。我错过了什么?
我希望这个方法可以工作,并在Java 17和Java 1.8中输出相同的值。

wfveoks0

wfveoks01#

os.arch属性报告正在运行的JVM可执行文件的 * 本机 * 指令集,这在 * 您的 * Java 8和Java 17情况下是不同的。
我认为事情是这样的。

  • 您以前使用的Java 8安装是x86_64版本,并且您使用的是MacOS的x86_64模拟 Rosetta 2
  • Java 17安装是一个原生的ARM 64构建。

我希望这个方法可以工作,并为jdk 17和jdk1.8输出相同的值。
只有当Java构建具有相同的目标体系结构时才会发生这种情况。如果你想为Java 8构建一个ARM 64,你可以从第三方供应商那里获得一个;请参见Will x64 jdk-1.8 work in Mac with Apple Silicon (M1) Chip?

zbdgwd5y

zbdgwd5y2#

您现在运行在原生aarch 64(ARM 64)的JVM上,而之前您运行的是x86_64(AMD 64)JVM,该JVM使用 Rosetta 2 技术转换为M2。
需要说明的是,x86_64是Intel/AMD x86 64位指令集,而M2实际上是aarch 64(ARM 64)。因此,从技术上讲,Java 8版本是在对你撒谎,因为它实际上运行在x86-64仿真层上。

相关问题