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

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

我有这个方法

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,并输出相同的值。

java operating-system jvm
1个回答
1
投票

os.arch
属性报告正在运行的代码的指令集,这在您的Java 8和Java 17情况下是不同的。

这就是我认为发生的事情。

  • 您之前使用的 Java 8 安装是 x86_64 版本,并且您使用的是 MacOS 的 x86_64 模拟。
  • Java 17 安装是本机 ARM64 版本。

我期望此方法有效并为 jdk17 和 jdk1.8 输出相同的值。

只有当 Java 构建具有相同的目标架构时才会发生这种情况。如果您想要 Java 1.8 的 ARM64 版本,您可以从第三方供应商那里获得;请参阅 x64 jdk-1.8 可以在配备 Apple Silicon (M1) 芯片的 Mac 上工作吗?

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