Bob*_*Gee 552 java 64-bit java-native-interface jvm 32-bit
如何判断我的应用程序运行的JVM是32位还是64位?具体来说,我可以访问什么功能或偏好来在程序中检测到这个?
gpa*_*ara 690
您可以尝试命令行:
$ java -help
...
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
Run Code Online (Sandbox Code Playgroud)
如果它不是64位版本,您将收到如下消息:
此Java实例不支持64位JVM.请安装所需的版本.
有关详细信息,请参阅JVM的帮助选项 -d32
cod*_*ict 311
Sun有一个Java System属性来确定JVM的位数:32或64:
System.getProperty("sun.arch.data.model");
Run Code Online (Sandbox Code Playgroud)
您可以使用
System.getProperty("sun.arch.data.model");
Run Code Online (Sandbox Code Playgroud)
从程序中确定其是否为32/64.
编写Java代码时,如何区分32位和64位操作?
没有公共API允许您区分32位和64位操作.将64位视为一次写入中的另一个平台,随处运行.但是,如果您要编写特定于平台的代码(对您有羞耻感),则系统属性
"32"
的值为"32","64"或"unknown".
唯一的好理由是,如果您的java代码依赖于本机库,并且您的代码需要确定在启动时加载哪个版本(32或64位).
Sed*_*inc 181
只需输入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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
注意Client
而不是64-Bit Server
在第三行.这Client/Server
部分是无关紧要的,没有64-Bit
重要的.
如果系统上安装了多个Java版本,请导航到要检查的Java版本的/ bin文件夹,然后在其中键入java -version
.
bry*_*sai 34
再次更新:
我安装了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
Run Code Online (Sandbox Code Playgroud)
这是针对SUN和IBM JVM(32位和64位)进行测试的.显然,系统属性不仅仅是操作系统.
dim*_*dim 15
补充信息:
在正在运行的进程中,您可以使用(至少使用一些最新的Sun JDK5/6版本):
$ /opt/java1.5/bin/jinfo -sysprops 14680 | grep sun.arch.data.model
Attaching to process ID 14680, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 1.5.0_16-b02
sun.arch.data.model = 32
Run Code Online (Sandbox Code Playgroud)
其中14680是运行应用程序的jvm的PID."os.arch"也有效.
还支持其他方案:
jinfo [ option ] pid
jinfo [ option ] executable core
jinfo [ option ] [server-id@]remote-hostname-or-IP
Run Code Online (Sandbox Code Playgroud)
不过也要考虑这个说明:
" 注意 - 此实用程序不受支持,可能会或可能不会在JDK的未来版本中可用.在没有dbgent.dll的Windows系统中,需要安装'Windows调试工具'才能使这些工具正常工作. PATH环境变量应包含目标进程使用的jvm.dll的位置或生成Crash Dump文件的位置."
在Linux上,您可以使用以下两个命令之一获取ELF标头信息:
file {YOUR_JRE_LOCATION_HERE}/bin/java
Run Code Online (Sandbox Code Playgroud)
o/p:用于GNU/Linux 2.4.0的ELF 64位LSB可执行文件,AMD x86-64,版本1(SYSV),动态链接(使用共享库),用于GNU/Linux 2.4.0,不剥离
要么
readelf -h {YOUR_JRE_LOCATION_HERE}/bin/java | grep 'Class'
Run Code Online (Sandbox Code Playgroud)
o/p:等级:ELF 64
如果您使用的是JNA,则可以检查com.sun.jna.Native.POINTER_SIZE == 4
(32位)还是com.sun.jna.Native.POINTER_SIZE == 8
(64位).
归档时间: |
|
查看次数: |
626743 次 |
最近记录: |