Skontrolujte, či program Java beží v 64-bitovom alebo 32-bitovom JVM

1. Prehľad

Aj keď je Java nezávislá na platforme, sú chvíle, keď musíme používať natívne knižnice. V týchto prípadoch možno budeme musieť identifikovať podkladovú platformu a pri spustení načítať príslušné natívne knižnice.

V tomto výučbe sa naučíme rôzne spôsoby, ako skontrolovať, či je program Java spustený na 64-bitovom alebo 32-bitovom JVM.

Najskôr si ukážeme, ako to dosiahnuť pomocou Systém trieda.

Potom uvidíme, ako používať API Java Native Access (JNA) na kontrolu bitovej rýchlosti JVM. JNA je knižnica vyvinutá komunitou, ktorá umožňuje všetok natívny prístup.

2. Pomocou sun.arch.data.model Vlastnosť systému

The Systém trieda v Jave poskytuje prístup k externe definovaným vlastnostiam a premenným prostredia. Tvrdí a Vlastnosti objekt, ktorý popisuje konfiguráciu aktuálneho pracovného prostredia.

Môžeme použiťsun.arch.data.model”Vlastnosť systému na identifikáciu bitovej hodnoty JVM:

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

Obsahuje „32“ alebo „64“ na označenie 32-bitového alebo 64-bitového JVM. Aj keď je tento prístup ľahko použiteľný, vráti vrátenie hodnoty „neznámy“, ak vlastnosť nie je prítomná. Preto bude fungovať iba s verziami Oracle Java.

Pozrime sa na kód:

verejná trieda JVMBitVersion {verejný reťazec getUsingSystemClass () {návrat System.getProperty ("sun.arch.data.model") + "-bit"; } // ... ďalšie metódy} 

Poďme tento prístup skontrolovať pomocou testu jednotky:

@Test public void whenUsingSystemClass_thenOutputIsAsExected () {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. Používanie JNA API

JNA (Java Native Access) podporuje rôzne platformy ako macOS, Microsoft Windows, Solaris, GNU a Linux.

Používa natívne funkcie na načítanie knižnice podľa názvu a na získanie ukazovateľa na funkciu v tejto knižnici.

3.1. Nativní Trieda

Môžeme použiť POINTER_SIZE z Nativní trieda. Táto konštanta určuje veľkosť (v bajtoch) natívneho ukazovateľa na aktuálnej platforme.

Hodnota 4 označuje 32-bitový natívny ukazovateľ, zatiaľ čo hodnota 8 označuje 64-bitový natívny ukazovateľ:

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

3.2. Plošina Trieda

Prípadne môžeme použiť Plošina triedy, ktorá poskytuje zjednodušené informácie o platforme.

Obsahuje the is64Bit () metóda, ktorá zisťuje, či je JVM 64-bitový alebo nie.

Pozrime sa, ako identifikuje bitovosť:

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; } návrat Native.POINTER_SIZE == 8; }

Tu je ARCH konštanta je odvodená z „os.arch”Nehnuteľnosť cez Systém trieda. Používa sa na získanie architektúry operačného systému:

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

Tento prístup funguje pre rôzne operačné systémy a tiež pre rôznych dodávateľov JDK. Preto je spoľahlivejší ako „sun.arch.data.model”Vlastnosť systému.

4. Záver

V tomto tutoriáli sme sa naučili, ako skontrolovať bitovú verziu JVM. Tiež sme sledovali, ako nám JNA zjednodušila riešenie na rôznych platformách.

Celý kód je ako vždy k dispozícii na stránkach GitHub.


$config[zx-auto] not found$config[zx-overlay] not found