Provjerite radi li Java program u 64-bitnom ili 32-bitnom JVM-u
1. Pregled
Iako je Java neovisna o platformi, postoje trenuci kada moramo koristiti matične knjižnice. U tim ćemo slučajevima možda trebati identificirati osnovnu platformu i pri pokretanju učitati odgovarajuće matične knjižnice.
U ovom uputstvu naučit ćemo različite načine kako provjeriti radi li Java program na 64-bitnom ili 32-bitnom JVM-u.
Prvo ćemo pokazati kako to postići pomoću Sustav razred.
Zatim ćemo vidjeti kako koristiti Java Native Access (JNA) API za provjeru bitnosti JVM-a. JNA je knjižnica razvijena u zajednici koja omogućuje svim izvornim pristupima.
2. Korištenje sunce.arh.data.model Svojstvo sustava
The Sustav klasa u Javi omogućuje pristup eksterno definiranim svojstvima i varijablama okoline. Održava a Svojstva objekt koji opisuje konfiguraciju trenutnog radnog okruženja.
Možemo koristiti "sunce.arh.data.model”Svojstvo sustava za prepoznavanje bitnosti JVM-a:
System.getProperty ("sun.arch.data.model");
Sadrži "32" ili "64" za označavanje 32-bitnog ili 64-bitnog JVM-a. Iako je ovaj pristup jednostavan za upotrebu, vraća "nepoznato" ako svojstvo nije prisutno. Stoga će raditi samo s Oracle Java verzijama.
Pogledajmo kod:
javna klasa JVMBitVersion {javni niz getUsingSystemClass () {return System.getProperty ("sun.arch.data.model") + "-bit"; } // ... ... ostale metode}
Provjerimo ovaj pristup kroz jedinični test:
@Test public void whenUsingSystemClass_thenOutputIsAsExpected () {if ("64" .equals (System.getProperty ("sun.arch.data.model"))) {assertEquals ("64-bit", jvmVersion.getUsingSystemClass ()); } inače if ("32" .equals (System.getProperty ("sun.arch.data.model"))) {assertEquals ("32-bit", jvmVersion.getUsingSystemClass ()); }}
3. Korištenje JNA API-ja
JNA (Java Native Access) podržava razne platforme kao što su macOS, Microsoft Windows, Solaris, GNU i Linux.
Koristi izvorne funkcije za učitavanje knjižnice po imenu i dohvaćanje pokazivača na funkciju unutar te knjižnice.
3.1. Native Razred
Možemo koristiti POINTER_SIZE od Native razred. Ova konstanta određuje veličinu (u bajtovima) nativnog pokazivača na trenutnoj platformi.
Vrijednost 4 označava 32-bitni izvorni pokazivač, dok vrijednost 8 označava 64-bitni izvorni pokazivač:
if (com.sun.jna.Native.POINTER_SIZE == 4) {// 32-bit}} else if (com.sun.jna.Native.POINTER_SIZE == 8) {// 64-bit}
3.2. Platforma Razred
Alternativno, možemo koristiti Platforma klase, koja pruža pojednostavljene informacije o platformi.
Sadrži the is64Bit () metoda koja otkriva je li JVM 64-bitni ili nije.
Pogledajmo kako prepoznaje bitness:
javna statička konačna logička is64Bit () {Model niza = 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; }
Evo, ARCH konstanta je izvedena iz "os.arh”Nekretnina putem Sustav razred. Koristi se za dobivanje arhitekture operativnog sustava:
ARCH = getCanonicalArchitecture (System.getProperty ("os.arch"), osType);
Ovaj pristup djeluje za različite operativne sustave, a također i za različite dobavljače JDK. Stoga je pouzdaniji od „sunce.arh.data.model”Svojstvo sustava.
4. Zaključak
U ovom uputstvu naučili smo kako provjeriti verziju bita JVM. Također smo primijetili kako nam je JNA pojednostavila rješenje na različitim platformama.
Kao i uvijek, cjeloviti kôd dostupan je na GitHub-u.