我有这个方法
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中输出相同的值。
2条答案
按热度按时间wfveoks01#
os.arch
属性报告正在运行的JVM可执行文件的 * 本机 * 指令集,这在 * 您的 * Java 8和Java 17情况下是不同的。我认为事情是这样的。
我希望这个方法可以工作,并为jdk 17和jdk1.8输出相同的值。
只有当Java构建具有相同的目标体系结构时才会发生这种情况。如果你想为Java 8构建一个ARM 64,你可以从第三方供应商那里获得一个;请参见Will x64 jdk-1.8 work in Mac with Apple Silicon (M1) Chip?。
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仿真层上。