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


当前回答

获取当前运行程序的JVM版本

System.out.println(Runtime.class.getPackage().getImplementationVersion());

其他回答

如果您使用的是JNA,您可以检查com.sun.jna.Native. net是否为JNA。POINTER_SIZE == 4(32位)或com.sun.jna.Native。指针大小== 8(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位)上进行了测试。显然,系统属性不仅仅是操作系统拱门。

您可以使用JNI库。这将始终工作,并且独立于运行的JVM品牌。

Java代码:

package org.mytest;

public class NativeBinding
{
    public static native int getRegisterWidth(); // returns 32 or 64
}

这是C代码:

#include <jni.h>

// will return register width (32 or 64)
extern "C" JNIEXPORT jint JNICALL
Java_org_mytest_NativeBinding_getRegisterWidth(JNIEnv*, jclass)
{
    return sizeof(void*) * 8;
}

只需在控制台中输入java -version。

如果64位版本正在运行,你会得到这样的消息:

java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)

32位版本将显示类似的内容:

java version "1.6.0_41"
Java(TM) SE Runtime Environment (build 1.6.0_41-b02)
Java HotSpot(TM) Client VM (build 20.14-b01, mixed mode, sharing)

注意第三行是客户端,而不是64位服务器。客户端/服务器部分无关紧要,重要的是缺少64位。

如果您的系统上安装了多个Java版本,请导航到要检查的Java版本的/bin文件夹,并在那里键入Java -version。

获取当前运行程序的JVM版本

System.out.println(Runtime.class.getPackage().getImplementationVersion());