查看java 32 64_java - 如何判断我是在64位JVM还是32位JVM(从程序中运行)?

java - 如何判断我是在64位JVM还是32位JVM(从程序中运行)?

如何判断我的应用程序运行的JVM是32位还是64位? 具体来说,我可以访问什么功能或偏好来在程序中检测到这个?

10个解决方案

646 votes

您可以尝试命令行:

java -d64 -version

如果它不是64位版本,您将收到如下消息:

此Java实例不支持64位JVM。   请安装所需的版本。

有关更多信息,请参阅JVM的帮助选项java -help

gpampara answered 2019-01-21T18:42:14Z

302 votes

Sun有一个Java System属性来确定JVM的位数:32或64:

sun.arch.data.model=32 // 32 bit JVM

sun.arch.data.model=64 // 64 bit JVM

您可以使用

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

从程序中确定其是否为32/64。

来自Sun HotSpot FAQ:

编写Java代码时,我该怎么做   区分32位和64位  操作?

没有允许您的公共API   区分32位和64位  操作。 将64位视为公正   写一次的另一个平台,   在任何地方运行。 但是,如果   你想编写的代码是   特定的平台(羞辱你),   系统属性sun.arch.data.model   具有值“32”,“64”或   “未知”。

唯一的好理由是你的java  代码依赖于本机库  并且您的代码需要确定哪个  在启动时加载的版本(32或64位)。

codaddict answered 2019-01-21T18:41:34Z

169 votes

只需在控制台中输入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)

注意java -version而不是第三行中的64-Bit Server。 Client/Server部分无关紧要,重要的是缺少64-Bit。

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

Sedat Kilinc answered 2019-01-21T18:43:02Z

32 votes

再次更新:

我安装了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位)进行测试的。 显然,系统属性不仅仅是操作系统。

bryantsai answered 2019-01-21T18:43:37Z

13 votes

补充信息:

在正在运行的进程中,您可以使用(至少使用一些最新的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

其中14680是运行应用程序的jvm的PID。 “os.arch”也有效。

还支持其他方案:

jinfo [ option ] pid

jinfo [ option ] executable core

jinfo [ option ] [server-id@]remote-hostname-or-IP

不过也要考虑这个说明:

“注意 - 此实用程序不受支持,可能会或可能不会在JDK的未来版本中可用。在没有dbgent.dll的Windows系统中,需要安装'Windows调试工具'才能使这些工具正常工作。 PATH环境变量应包含目标进程使用的jvm.dll的位置或生成Crash Dump文件的位置。“

dim answered 2019-01-21T18:44:37Z

6 votes

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

file {YOUR_JRE_LOCATION_HERE}/bin/java

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'

O / P:分类:ELF64

jawsnnn answered 2019-01-21T18:45:14Z

6 votes

如果您使用的是JNA,则可以检查com.sun.jna.Native.POINTER_SIZE == 4(32位)或com.sun.jna.Native.POINTER_SIZE == 8(64位)。

Anthony Hayward answered 2019-01-21T18:45:36Z

1 votes

在“程序|程序和功能”下的“控制面板”中的Windows 7下,JRE&的64位变体。 JDK在括号中列出“64位”(例如“Java SE Development Kit 7 Update 65(64-Bit)”),而对于32位变体,括号中没有提到变体(例如“Java SE Development”) 套件8更新60“)。

user1364368 answered 2019-01-21T18:45:58Z

0 votes

对于Windows,您可以查看Java的主页位置。 如果它包含(x86)则为32-bit,否则为64-bit:

public static boolean is32Bit()

{

val javaHome = System.getProperty("java.home");

return javaHome.contains("(x86)");

}

public static boolean is64Bit()

{

return !is32Bit();

}

示例路径:

C:\Program Files (x86)\Java\jdk1.8.0_181\bin\java.exe # 32-bit

C:\Program Files\Java\jdk-10.0.2\bin\java.exe # 64-bit

为什么只关心Windows解决方案?

如果您需要知道正在运行的是哪个位版本,那么您很可能在Windows上使用本机代码,因此无论如何平台独立性都是不可能的。

BullyWiiPlaza answered 2019-01-21T18:46:39Z

-1 votes

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

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

Sherlock Smith answered 2019-01-21T18:47:01Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值