如何找到OS位类型

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

我从系统属性获取详细信息。 我有64位机器和操作系统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


如何获得OS实际位类型?

 System.getProperty("os.arch"); 

应该可以在所有平台上使用,有关详细信息,请参阅Java System Properties Tutorial。

但是如果它是32位JVM,那么64位Windows平台将存在于JVM中。 实际上64位Windows将涉及任何关于环境的32位进程,以帮助旧的32位程序在64位操作系统上正常工作。 有关更多信息,请阅读有关WOW64的MSDN文章。

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

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

参考

最好的解决方案(也是跨平台的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。 所以谨慎使用它。

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

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

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

这应该对你有帮助

 System.getProperty("os.arch"); 

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