我如何知道我的应用程序运行的JVM是32位还是64位?具体来说,我可以在程序中使用哪些函数或属性来检测这一点?


当前回答

在Linux上,您可以使用以下两个命令之一来获取ELF头信息:

file {YOUR_JRE_LOCATION_HERE}/bin/java

o / p: ELF 64位LSB可执行文件,AMD x86-64,版本1 (SYSV),适用于GNU/Linux 2.4.0,动态链接(使用共享库),适用于GNU/Linux 2.4.0,未剥离

or

readelf -h {YOUR_JRE_LOCATION_HERE}/bin/java | grep 'Class'

o / p: 类 : ELF64

其他回答

你检索系统属性,标记这个JVM的位:

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

可能的结果是:

“32” – 32 位 JVM “64” – 64 位 JVM “未知” – 未知 JVM

如热点常见问题解答所述:

在编写Java代码时,如何区分32位和64位操作? 没有公共API允许你区分32位和64位操作。把64位看作是编写一次,随处运行的传统的另一个平台。然而,如果你想编写特定于平台的代码,系统属性sun.arch.data.model的值是"32"、"64"或"unknown"。

需要这样做的一个例子是,如果您的Java代码依赖于本机库,并且需要确定在启动时是加载32位版本的库还是64位版本的库。

我安装了32位JVM,并再次重试,看起来以下确实告诉你JVM位,而不是OS arch:

System.getProperty("os.arch");
#
# on a 64-bit Linux box:
# "x86" when using 32-bit JVM
# "amd64" when using 64-bit JVM

这在SUN和IBM JVM(32和64位)上进行了测试。显然,系统属性不仅仅是操作系统拱门。

如果您使用的是JNA,您可以检查com.sun.jna.Native. net是否为JNA。POINTER_SIZE == 4(32位)或com.sun.jna.Native。指针大小== 8(64位)。

在Linux上,您可以使用以下两个命令之一来获取ELF头信息:

file {YOUR_JRE_LOCATION_HERE}/bin/java

o / p: ELF 64位LSB可执行文件,AMD x86-64,版本1 (SYSV),适用于GNU/Linux 2.4.0,动态链接(使用共享库),适用于GNU/Linux 2.4.0,未剥离

or

readelf -h {YOUR_JRE_LOCATION_HERE}/bin/java | grep 'Class'

o / p: 类 : ELF64

如果你正在使用JNA,你可以使用thisPlatform.is64Bit()。