我如何知道我的应用程序运行的JVM是32位还是64位?具体来说,我可以在程序中使用哪些函数或属性来检测这一点?
当前回答
你检索系统属性,标记这个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位版本的库。
其他回答
对于某些版本的Java,您可以使用标记-d32和-d64从命令行检查JVM的位。
$ java -help
...
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
要检查64位JVM,运行:
$ java -d64 -version
如果它不是一个64位JVM,你会得到这个:
Error: This Java instance does not support a 64-bit JVM.
Please install the desired version.
类似地,要检查32位JVM,运行:
$ java -d32 -version
如果它不是一个32位JVM,你会得到这个:
Error: This Java instance does not support a 32-bit JVM.
Please install the desired version.
这些标志是在Java 7中添加的,在Java 9中已弃用,在Java 10中被删除,并且在Java的现代版本中不再可用。
如果您使用的是JNA,您可以检查com.sun.jna.Native. net是否为JNA。POINTER_SIZE == 4(32位)或com.sun.jna.Native。指针大小== 8(64位)。
如果你正在使用JNA,你可以使用thisPlatform.is64Bit()。
获取当前运行程序的JVM版本
System.out.println(Runtime.class.getPackage().getImplementationVersion());
你检索系统属性,标记这个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位版本的库。
推荐文章
- 在流中使用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