檢查Java程序是在64位還是32位JVM中運行
- java
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
常量是System
類os.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如何在不同平台上為我們簡化了解決方案。