拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 检查Java程序是在64位还是32位JVM中运行

检查Java程序是在64位还是32位JVM中运行

白鹭 - 2022-11-26 583 0 0

1.概述

尽管Java与平台无关,但是有时候我们不得不使用本机库。在这些情况下,我们可能需要识别基础平台并在启动时加载适当的本机库。

在本教程中,我们将学习检查Java程序是在64位还是32位JVM上运行的不同方法。

首先,我们将展示如何使用System类来实现这一点。

然后,我们将看到如何使用Java Native Access (JNA)API来检查JVM的位。 JNA是社区开发的库,支持所有本机访问。

2.使用sun.arch.data.model系统属性

Java中的System类提供对外部定义的属性和环境变量的访问。它维护一个描述当前工作环境配置的“ Properties

我们可以使用“ sun.arch.data.model ”系统属性来识别JVM位:

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

它包含“ 32”或“ 64”,分别表示32位或64位JVM。尽管此方法易于使用,但如果不存在该属性,它将返回“未知”。因此,它将仅适用于Oracle Java版本。

让我们看一下代码:

public class JVMBitVersion { public String getUsingSystemClass() { return System.getProperty("sun.arch.data.model") + "-bit";

 } //... other methods

 }

让我们通过单元测试来检查这种方法:

@Test

 public void whenUsingSystemClass_thenOutputIsAsExpected() { if ("64".equals(System.getProperty("sun.arch.data.model"))) {

 assertEquals("64-bit", jvmVersion.getUsingSystemClass());

 } else if ("32".equals(System.getProperty("sun.arch.data.model"))) {

 assertEquals("32-bit", jvmVersion.getUsingSystemClass());

 }

 }

3.使用JNA API

JNA( Java本机访问)支持各种平台,例如macOS,Microsoft Windows,Solaris,GNU和Linux。

它使用本机函数按名称加载库并检索指向该库中函数的指针。

3.1 Platform

另外,我们可以使用Platform类,它提供了简化的平台信息。

它包含**is64Bit()方法,该方法检测JVM是否为64位**。

让我们看看它如何识别位:

public static final boolean is64Bit() {

 String model = System.getProperty("sun.arch.data.model",

 System.getProperty("com.ibm.vm.bitmode")); if (model != null) { return "64".equals(model);

 } if ("x86-64".equals(ARCH)

 || "ia64".equals(ARCH)

 || "ppc64".equals(ARCH) || "ppc64le".equals(ARCH)

 || "sparcv9".equals(ARCH)

 || "mips64".equals(ARCH) || "mips64el".equals(ARCH)

 || "amd64".equals(ARCH)

 || "aarch64".equals(ARCH)) { return true;

 } return Native.POINTER_SIZE == 8;

 }

此处, ARCH常量是Systemos.arch ”属性派生的。它用于获取操作系统体系结构:

ARCH = getCanonicalArchitecture(System.getProperty("os.arch"), osType);

这种方法适用于不同的操作系统以及不同的JDK供应商。因此,它比“ sun.arch.data.model ”系统属性更可靠。

3.2  Native

我们可以使用Native类中的POINTER_SIZE该常数指定当前平台上本机指针的大小(以字节为单位)。

值4表示32位本机指针,而值8表示64位本机指针:

if (com.sun.jna.Native.POINTER_SIZE == 4) { // 32-bit

 } else if (com.sun.jna.Native.POINTER_SIZE == 8) { // 64-bit

 }

4。结论

在本教程中,我们学习了如何检查JVM位版本。我们还观察了JNA如何在不同平台上为我们简化了解决方案。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *