如何使用 Java 检查操作系统的位数? (J2SE,不是 os.arch)

Posted

技术标签:

【中文标题】如何使用 Java 检查操作系统的位数? (J2SE,不是 os.arch)【英文标题】:How can I check the bitness of my OS using Java? (J2SE, not os.arch) 【发布时间】:2011-06-12 12:44:00 【问题描述】:

我正在开发一个软件应用程序来检查您安装了哪种软件,但为了这样做,我必须知道操作系统是 32 位还是 64 位操作系统。

我试过 System.getProperty("os.arch");但后来我读到这个命令只向我们展示了 JDK/JRE 的位数,而不是操作系统本身。如果您能告诉我如何知道正在使用的操作系统(Windows 7、Mac OS、Ubuntu 等),那就太棒了。

【问题讨论】:

嗯,是的,我就是这么想的,但后来我看到了这个链接,你可能想看看:mark.koli.ch/2009/10/…告诉我你的想法 您可能希望接受其他答案。 【参考方案1】:
System.getProperty("os.arch");

应该在所有平台上都可用,有关更多信息,请参阅 Java System Properties Tutorial。

但是如果是 32 位 JVM,64 位 Windows 平台会欺骗 JVM。实际上,64 位 Windows 会欺骗任何 32 位进程的环境,以帮助旧的 32 位程序在 64 位操作系统上正常工作。阅读MSDN article about WOW64了解更多信息。

作为 WOW64 的结果,调用 System.getProperty("os.arch") 的 32 位 JVM 将返回“x86”。如果你想在Windows上获得底层操作系统的真实架构,使用如下逻辑:

String arch = System.getenv("PROCESSOR_ARCHITECTURE");
String wow64Arch = System.getenv("PROCESSOR_ARCHITEW6432");

String realArch = arch != null && arch.endsWith("64")
                  || wow64Arch != null && wow64Arch.endsWith("64")
                      ? "64" : "32";

另见:

HOWTO: Detect Process Bitness

Why %processor_architecture% always returns x86 instead of AMD64

Detect whether current Windows version is 32 bit or 64 bit

【讨论】:

我在 mac osx 的 realArch 线上得到了 NPE :( 比我们之前的实现效果更好。谢谢! 我想道歉,一直以来我都把你的答案选为正确答案!但是现在已经完成了(: MacOS 和 Linux 怎么样? @user7485... 我认为 os.arch 始终是 JRE 的位,而不是操作系统。例如System.getProperty("os.arch") in java code yields i386 os architecture, but my ubuntu is actually x86_64. Why?。在这种情况下,不是 Windows 对 Java 撒谎,而是 os.arch 表示 JRE 的位数。【参考方案2】:

os.arch 不是操作系统的比特,当心这个解决方案! http://mark.koli.ch/2009/10/javas-osarch-system-property-is-the-bitness-of-the-jre-not-the-operating-system.html

【讨论】:

虽然理论上这可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。【参考方案3】:

您可以拨打电话查看

System.getProperty("sun.arch.data.model");

此行返回 32 或 64,用于标识 JVM 是 32 位还是 64 位。

【讨论】:

sun. 开头的系统属性不是标准的。 此外,OP 是关于操作系统,而不是 JVM【参考方案4】:

没有特定平台就没有办法做到这一点。 看看this 页面上的最后一篇文章(那里的解决方案是特定于平台的)。

os.name 属性为您提供所用操作系统的名称,os.version 版本。

【讨论】:

以上是关于如何使用 Java 检查操作系统的位数? (J2SE,不是 os.arch)的主要内容,如果未能解决你的问题,请参考以下文章

java 如何创建一个类或方法能够给出产生指定位数的一个随机数?

在 jQuery 中,如何添加小数位数的值?

检查windows操作系统的位数

检查windows操作系统的位数

java如何获取一个double的小数位数

熊猫如何在数据框的相应列检查行的每个元素的百分位数