如何查找OS位类型

时间:2013-12-31 11:31:24

标签: java architecture properties operating-system

我想知道操作系统类型,意思是64位操作系统或32位操作系统。但我从32位/ 64位可执行文件获得不同的响应,获得有关操作系统的系统属性

我从系统属性获取详细信息。我有64位机器和OS Windows 8.1 X64

        "OS Architecture : " + System.getProperty("os.arch"));

        "OS Name : " + System.getProperty("os.name"));

        "OS Version : " + System.getProperty("os.version")

        "Data Model : " + System.getProperty("sun.arch.data.model"));


在运行 64位可执行文件时获得以下响应。


操作系统架构 amd64

操作系统名称:Windows 8

操作系统版本:6.2 amd64

数据模型:64


在运行 32位可执行文件时获得以下响应。


操作系统架构 x86

操作系统名称:Windows 8

操作系统版本:6.2 x86

数据模型:32


如何获得操作系统实际位类型?

3 个答案:

答案 0 :(得分:1)

最佳解决方案(也是跨平台的IMO)就是这里给出的答案: https://stackoverflow.com/a/2269242/1973164

  

我不完全相信读取os.arch系统变量。虽然它在用户在64位系统上运行64位JVM时有效。如果用户在64位系统上运行32位JVM,它将不起作用。

     

以下代码适用于正确检测Windows 64位操作系统。在Windows 64位系统上,将设置环境变量“Programfiles(x86)”。它不会在32位系统上设置,java会将其读为null。

boolean is64bit = false;
if (System.getProperty("os.name").contains("Windows")) {
    is64bit = (System.getenv("ProgramFiles(x86)") != null);
} else {
    is64bit = (System.getProperty("os.arch").indexOf("64") != -1);
}
     

对于Linux或Solaris或Mac等其他操作系统,我们也可能会看到此问题。所以这不是一个完整的解决方案。对于mac,您可能很安全,因为Apple锁定JVM以匹配操作系统。但Linux和Solaris等......他们仍然可以在64位系统上使用32位JVM。所以请谨慎使用。

答案 1 :(得分:0)

这应该可以帮到你

System.getProperty("os.arch");
当JRE的体系结构为32位时,

将返回“x86”。我们必须编写本机代码以使用JNI获得系统的真实体系结构。

答案 2 :(得分:0)

System.getProperty(“os.arch”)将始终返回jre的位类型,而不是实际操作系统的位类型。

从winapi编写jni代码并调用IsWow64Process。因为你正在使用Windows。

此布尔函数告诉您进程是否在64位操作系统上运行。