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.


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