我如何知道我的应用程序运行的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。
如果您使用的是JNA,您可以检查com.sun.jna.Native. net是否为JNA。POINTER_SIZE == 4(32位)或com.sun.jna.Native。指针大小== 8(64位)。
在Windows 7的“控制面板”下的“程序|程序和功能”中,64位的JRE和JDK变体被列出,括号中有“64位”(例如:“Java SE Development Kit 7 Update 65(64位)”),而对于32位的变体,括号中没有提到该变体(例如,只是“Java SE Development Kit 8 Update 60”)。
获取当前运行程序的JVM版本
System.out.println(Runtime.class.getPackage().getImplementationVersion());
如果你正在使用JNA,你可以使用thisPlatform.is64Bit()。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap