Comment puis-je savoir si je tourne en JVM 64 bits ou en JVM 32 bits (à partir d'un programme)?

Comment puis-je savoir si la JVM dans laquelle mon application s'exécute est de 32 bits ou de 64 bits? Plus précisément, à quelle fonction ou préférence puis-je accéder pour détecter cela dans le programme?

512
demandé sur Christopher Bottoms 2010-01-14 06:38:29

10 réponses

Sun a une propriété de système Java pour déterminer le bitness de la JVM: 32 ou 64:

sun.arch.data.model=32 // 32 bit JVM
sun.arch.data.model=64 // 64 bit JVM

vous pouvez utiliser

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

pour déterminer si son 32/64 du programme.

De la Soleil HotSpot FAQ :

lors de l'écriture de code Java, Comment puis-je distinguer entre 32 et 64 bits opération?

il n'y a pas D'API publique qui vous permet distinguer entre 32 et 64 bits opération. Pensez à 64 bits seulement une autre plate-forme dans l'écriture une fois, courir partout tradition. Toutefois, si vous souhaitez écrire le code qui est plate-forme spécifique (honte sur vous), la propriété du système sun.arch.data.model a la valeur "32", "64", ou "inconnu."

la seule bonne raison est si votre java code dépend de bibliothèques natives et votre code doit déterminer la la version (32 ou 64 bits).) à charger au démarrage.

303
répondu codaddict 2016-08-18 03:19:23

Vous pouvez essayer sur la ligne de commande:

java -d64 -version

si ce n'est pas une version 64 bits, vous obtiendrez un message qui ressemble à:

cette instance Java ne supporte pas les JVM 64 bits. Veuillez installer la version désirée.

consultez les options d'aide de la JVM pour plus d'informations java -help

640
répondu gpampara 2012-10-03 12:41:27

tapez juste java -version dans votre console.

si une version 64 bits est en cours d'exécution, vous recevrez un message comme:

java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)

une version 32 bits montrera quelque chose de similaire à:

java version "1.6.0_41"
Java(TM) SE Runtime Environment (build 1.6.0_41-b02)
Java HotSpot(TM) Client VM (build 20.14-b01, mixed mode, sharing)

Note Client au lieu de 64-Bit Server à la troisième ligne. La partie Client/Server n'est pas pertinente, c'est l'absence du 64-Bit qui importe.

si plusieurs versions Java sont installées sur votre système, naviguez vers le dossier / bin de la version Java que vous voulez vérifier, et tapez java -version là.

168
répondu Sedat Kilinc 2015-05-04 10:34:12

Mise À Jour :

j'ai installé JVM 32-bit et je l'ai récupéré à nouveau, on dirait que ce qui suit vous dit bitness JVM, pas OS arch:

System.getProperty("os.arch");
#
# on a 64-bit Linux box:
# "x86" when using 32-bit JVM
# "xmd64" when using 64-bit JVM

cela a été testé contre SUN et IBM JVM (32 et 64-bit). De toute évidence, la propriété du système n'est pas seulement l'arche du système d'exploitation.

30
répondu bryantsai 2010-01-14 23:13:35

informations complémentaires:

Sur un processus en cours vous pouvez utiliser (au moins avec les récents Soleil JDK5/6 versions):

$ /opt/java1.5/bin/jinfo -sysprops 14680 | grep sun.arch.data.model
Attaching to process ID 14680, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 1.5.0_16-b02
sun.arch.data.model = 32

où 14680 est le PID de la jvm exécutant la demande. "OS.arch" fonctionne aussi.

D'autres scénarios sont également pris en charge:

jinfo [ option ] pid
jinfo [ option ] executable core
jinfo [ option ] [server-id@]remote-hostname-or-IP 

toutefois considérer aussi cette note:

NOTE - cette utilité n'est pas pris en charge et peut ou non être disponible dans les versions futures du JDK. Dans les systèmes de fenêtres où dbgent.dll est absent,' Debugging Tools for Windows ' doit être installé pour que ces outils fonctionnent. De même, la variable D'environnement PATH devrait contenir l'emplacement de jvm.dll utilisé par le processus cible ou l'endroit à partir duquel le fichier crash Dump a été produit."

13
répondu dim 2012-02-16 19:04:21

sous Linux, vous pouvez obtenir des informations D'en-tête ELF en utilisant l'une des deux commandes suivantes:

file {YOUR_JRE_LOCATION_HERE}/bin/java

o / p: ELF 64-bit LSB executable , AMD x86-64, version 1 (SYSV), pour GNU / Linux 2.4.0, dynamiquement lié (utilise libs partagées), pour GNU / Linux 2.4.0, Non dépouillé

ou

readelf -h {YOUR_JRE_LOCATION_HERE}/bin/java | grep 'Class'

o / p: Classe: ELF 64

6
répondu jawsnnn 2012-06-07 08:50:55

si vous utilisez JNA, vous pouvez vérifier si com.sun.jna.Native.POINTER_SIZE == 4 (32 bits) ou com.sun.jna.Native.POINTER_SIZE == 8 (64 bits).

6
répondu Anthony Hayward 2017-07-10 12:32:35

sous Windows 7 dans le" Panneau de configuration sous " Programmes | Programmes et caractéristiques "les variantes 64 bits de JRE & JDK sont listées avec" 64 bits "entre parenthèses (par exemple" Java SE Development Kit 7 Update 65 (64 bits) ", alors que pour les variantes de 32 bits la variante n'est pas mentionnée entre parenthèses (par exemple juste " Java SE Development Kit 8 Update 60 ").

1
répondu user1364368 2015-09-06 20:54:56

pour Windows , vous pouvez consulter le Java lieu de résidence. Si elle contient (x86) c'est 32-bit sinon 64-bit :

public static boolean is32Bit()
{
    val javaHome = System.getProperty("java.home");
    return javaHome.contains("(x86)");
}

public static boolean is64Bit()
{
    return !is32Bit();
}

exemples de parcours:

C:\Program Files (x86)\Java\jdk1.8.0_181\bin\java.exe # 32-bit
C:\Program Files\Java\jdk-10.0.2\bin\java.exe # 64-bit

Pourquoi une Windows seule solution?

si vous avez besoin de savoir quelle version bit vous utilisez, vous êtes probablement en train de jouer avec le code natif sur Windows donc plateforme-indépendance est hors de la fenêtre de toute façon.

0
répondu BullyWiiPlaza 2018-08-07 21:06:51

pour obtenir la version de JVM exécutant actuellement le programme

System.out.println(Runtime.class.getPackage().getImplementationVersion());
-1
répondu Olu 2017-09-24 12:32:47