安装的jvm是64位或32位[重复]

Posted

技术标签:

【中文标题】安装的jvm是64位或32位[重复]【英文标题】:Installed jvm is 64 bit or 32 bit [duplicate] 【发布时间】:2011-06-02 05:24:27 【问题描述】:

如何识别安装的Java版本是64 bit还是32 bit

【问题讨论】:

实际上,在运行时(来自您需要了解的在 JVM 上运行的 Java 代码)或来自检查操作系统上安装内容的脚本。根据答案,可能有两个完全不同的答案;) 我建议你编写不依赖于安装版本的代码。为什么你需要知道这个? 【参考方案1】:

在命令行输入 java -version。如果是 64 位,它会这么说,否则是 32 位。

例如

64 位 Oracle / Mac OS X

$ java -version

java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02-279-10M3065)
Java HotSpot(TM) 64-Bit Server VM (build 16.3-b01-279, mixed mode)

32 位 Oracle / Mac OS X(客户端)

$ java -version

java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02-279-10M3065)
Java HotSpot(TM) Client VM (build 16.3-b01-279, mixed mode, sharing)

32 位 Oracle / Mac OS X(服务器)

$ java -server -version

java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02-279-10M3065)
Java HotSpot(TM) Server VM (build 16.3-b01-279, mixed mode)

64 位 OpenJDK Ubuntu

$ java -version

java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.1) (6b20-1.9.1-1ubuntu3)
OpenJDK 64-Bit Server VM (build 17.0-b16, mixed mode)

32 位 Soylatte Mac OS X

$ java -version

java version "1.6.0_03-p3"
Java(TM) SE Runtime Environment (build 1.6.0_03-p3-landonf_19_aug_2008_14_55-b00)
Java HotSpot(TM) Client VM (build 1.6.0_03-p3-landonf_19_aug_2008_14_55-b00, mixed mode)

32 位 OpenJDK Mac OS X

$ java -version

openjdk version "1.6.0-internal"
OpenJDK Runtime Environment (build 1.6.0-internal-landonf_17_may_2009_13_58-b00)
OpenJDK Client VM (build 11.0-b17, mixed mode)

64 位 IBM Linux

$ java -version

java version "1.6.0"
Java(TM) SE Runtime Environment (build pxa6460sr8fp1-20100624_01(SR8 FP1))
IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 Linux amd64-64 jvmxa6460sr8ifx-20100609_59383 (JIT enabled, AOT enabled)

【讨论】:

$ java -version,这不会告诉我它是否是 32 位 VM,在执行命令时,我得到以下信息:java version "1.6.0_20" Java(TM) SE 运行时环境(内部版本 1.6.0_20-b02)Java HotSpot(TM) 客户端 VM(内部版本 16.3-b01,混合模式,共享) 然后是 32 位 VM ;) 如果是 64 位,它会明确说明。 32 位机器上的相同 Java 版本将显示:java 版本“1.6.0_20”Java(TM) SE 运行时环境(构建 1.6.0_20-b02-279-10M3065)Java HotSpot(TM) 客户端 VM(构建 16.3 -b01-279,混合模式,共享) 请注意,服务器或客户端没有区别。在 32 位机器上用 -server 执行,它仍然不会说“32 位” 此信息是否包含在 java -version 中以供其他供应商的运行时使用? 不知道。命令打印的内容取决于实现。至少 Sun JDK(已检查 Windows/Linux)和 Mac OS X JDK(无论如何都是 Sun 修改的版本)会打印这个。我快速检查了 32 位的 Soylatte 和 OpenJDK,在 32 位上它们不打印位数。 “混合模式,共享”中的“共享”是什么意思?【参考方案2】:

你可以获得os.arch属性:

String osArch = System.getProperty("os.arch");

这将告诉您操作系统的体系结构,而不是虚拟机的体系结构。

Sun 的 JRE 具有以下可能有用的属性(来自我的机器的值):

sun.arch.data.model : 32
sun.cpu.isalist : pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86

但请记住,这些不适用于其他供应商的虚拟机。因此,您可能还想查找其他 VM 的此类属性,这样您就不会依赖于供应商。

【讨论】:

这样,我得到的是底层OS版本还是JVM版本? 正如我提到的 - 操作系统版本。所以不能保证。 对,我也有办法识别 JVM 版本。 'System.getProperty("sun.arch.data.model")' 感谢您提供信息 请注意,这不适用于其他供应商的其他 VM。因此,请花点时间查看它们用于识别拱门的属性。 @KarthickRagunath 您确定您正在运行的 JVM 版本吗?因为“os.arch”旨在返回JVM版本,而不是底层操作系统【参考方案3】:

我安装了 32 位和 64 位版本的 Java,但 java -version 仅表示 64 位服务器(混合模式)。因此,如果您安装了多个(和以前的)Java 版本,这将不起作用。

还有另一种检查我刚刚意识到的方法:对于 Windows,如果您安装了 32 位版本,那么它将位于 c:\Program Files (x86)\java\jre7 (或任何安装的 Java 版本)。我看到我还有一个 jre6 文件夹,这有点令人不安,因为我以为我已经卸载了它。

而对于 64 位版本,它将位于 c:\Program Files\java 中(安装了所有 64 位应用程序)。

【讨论】:

以上是关于安装的jvm是64位或32位[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 64 位 Windows 上安装 32 位或 64 位应用程序有啥区别?

如何根据目标机器(32 位或 64 位)有条件地使用 WiX 安装文件?

检测32位或64位Windows

Eclipse 不启动:EXIT CODE 13 [重复]

text [检查Node是否安装了32位或64位] #javascript #node

python 检查是否安装了32位或64位版本的python(python 2.6+)