Ellenőrizze, hogy egy Java program fut-e 64 vagy 32 bites JVM-ben
1. Áttekintés
Bár a Java platformfüggetlen, van, amikor natív könyvtárakat kell használnunk. Ezekben az esetekben szükség lehet az alapul szolgáló platform azonosítására, és indításkor be kell tölteni a megfelelő natív könyvtárakat.
Ebben az oktatóanyagban különféle módszereket tanulhatunk meg annak ellenőrzésére, hogy egy Java program 64 vagy 32 bites JVM-en fut-e.
Először megmutatjuk, hogyan lehet ezt elérni a Rendszer osztály.
Ezután meglátjuk, hogyan lehet a Java Native Access (JNA) API-t használni a JVM bitségének ellenőrzéséhez. A JNA egy közösség által fejlesztett könyvtár, amely minden natív hozzáférést lehetővé tesz.
2. A sun.arch.data.modell Rendszer tulajdonság
A Rendszer osztály a Java-ban hozzáférést biztosít külsőleg meghatározott tulajdonságokhoz és környezeti változókhoz. Fenntartja a Tulajdonságok objektum, amely leírja az aktuális munkakörnyezet konfigurációját.
Használhatjuk asun.arch.data.modell”Rendszer tulajdonság a JVM bitségének azonosítására:
System.getProperty ("sun.arch.data.model");
„32” -et vagy „64” -et tartalmaz, amely egy 32 vagy 64 bites JVM-et jelöl. Bár ez a megközelítés könnyen használható, az „ismeretlen” értéket adja vissza, ha az ingatlan nincs jelen. Ezért csak az Oracle Java verzióival fog működni.
Lássuk a kódot:
public class JVMBitVersion {public String getUsingSystemClass () {return System.getProperty ("sun.arch.data.model") + "-bit"; } // ... egyéb módszerek}
Ellenőrizzük ezt a megközelítést egy egység teszt segítségével:
@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. A JNA API használata
A JNA (Java Native Access) különféle platformokat támogat, például macOS, Microsoft Windows, Solaris, GNU és Linux.
A natív függvényeket használja a könyvtár név szerinti betöltésére és a könyvtáron belüli függvény mutatójának lekérésére.
3.1. Anyanyelvi Osztály
Tudjuk használni POINTER_SIZE tól Anyanyelvi osztály. Ez az állandó meghatározza a natív mutató méretét (bájtban) az aktuális platformon.
A 4 érték egy 32 bites natív mutatót jelent, míg a 8 érték egy 64 bites natív mutatót:
if (com.sun.jna.Native.POINTER_SIZE == 4) {// 32-bit} else if (com.sun.jna.Native.POINTER_SIZE == 8) {// 64-bit}
3.2. Felület Osztály
Alternatív megoldásként használhatjuk a Felület osztály, amely egyszerűsített platforminformációkat nyújt.
Tartalmaz a is64Bit () módszer, amely érzékeli, hogy a JVM 64 bites vagy sem.
Lássuk, hogyan azonosítja a bitességet:
nyilvános statikus végső logikai is64Bit () {String model = System.getProperty ("sun.arch.data.model", System.getProperty ("com.ibm.vm.bitmode")); if (modell! = null) {visszatér "64" .egyenlő (modell); } if ("x86-64". egyenlő (ARCH) || "ia64". egyenlő (ARCH) || "ppc64". egyenlő (ARCH) || "ppc64le". egyenlő (ARCH) || "sparcv9" .egyenlő (ARCH) || "mips64". Egyenlő (ARCH) || "mips64el". Egyenlő (ARCH) || "amd64". Egyenlő (ARCH) || "aarch64" .egyenlő (ARCH)) {true igaz; } return Native.POINTER_SIZE == 8; }
Itt a BOLTÍV konstans származik aos.arch”Ingatlanon keresztül Rendszer osztály. Az operációs rendszer architektúrájának megszerzésére használják:
ARCH = getCanonicalArchitecture (System.getProperty ("os.arch"), osType);
Ez a megközelítés különböző operációs rendszereken és különböző JDK gyártóknál is működik. Ezért megbízhatóbb, mint asun.arch.data.modell”Rendszer tulajdonság.
4. Következtetés
Ebben az oktatóanyagban megtanultuk a JVM bit verziójának ellenőrzését. Megfigyeltük azt is, hogy a JNA hogyan egyszerűsítette a megoldást számunkra a különböző platformokon.
Mint mindig, a teljes kód elérhető a GitHubon.