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


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


502
2018-01-14 03:38


origine


Réponses:


Sun a une propriété Java System pour déterminer la quantité de la machine virtuelle Java: 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.

Du FAQ Sun HotSpot:

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 au 64-bit comme juste   une autre plate-forme dans l'écriture une fois,   courir partout la tradition. Toutefois, si   vous aimeriez écrire du code qui est   plate-forme spécifique (honte à vous), le   propriété du système sun.arch.data.model   a la valeur "32", "64", ou   "inconnu".

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


300
2018-01-14 03:44



Vous pouvez essayer sur la ligne de commande:

java -d64 -version

Si ce n'est pas une version 64 bits, vous obtiendrez un message ressemblant à:

Cette instance Java ne prend pas en charge une machine virtuelle Java 64 bits.   Veuillez installer la version souhaitée.

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


626
2018-01-14 05:00



Juste taper java -version dans votre console.

Si une version 64 bits est en cours d'exécution, vous obtiendrez un message du type:

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)

Remarque Client au lieu de 64-Bit Server dans la troisième ligne. le Client/Server partie est hors de propos, c'est l'absence de la 64-Bit c'est important.

Si plusieurs versions Java sont installées sur votre système, accédez au dossier / bin de la version Java que vous souhaitez vérifier, puis tapez java -version Là.


163
2018-06-03 20:58



Mettre à jour à nouveau:

J'ai installé JVM 32 bits et réessayé à nouveau, ressemble à ce qui suit vous dit bitness JVM, pas l'arc OS:

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 bits). Clairement, la propriété système n'est pas seulement l'arche du système d'exploitation.


29
2018-01-14 03:47



Informations complémentaires:

Sur un processus en cours vous pouvez utiliser (au moins avec certaines versions récentes de Sun JDK5 / 6):

$ /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 jvm exécutant l'application. "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érez également cette note:

"REMARQUE - Cet utilitaire n'est pas pris en charge et peut ou non être disponible dans les futures versions du JDK. Dans les systèmes Windows où dbgent.dll n'est pas présent, 'Outils de débogage pour Windows' doit être installé pour que ces outils fonctionnent. La variable d'environnement PATH doit également contenir l'emplacement de jvm.dll utilisé par le processus cible ou l'emplacement à partir duquel le fichier Crash Dump a été généré. "


13
2018-02-16 19:04



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: ELFE Exécutable LSB 64 bits, AMD x86-64, version 1 (SYSV), pour GNU / Linux 2.4.0, lié dynamiquement (utilise des librairies partagées), pour GNU / Linux 2.4.0, non déshabillé

ou

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

o / p: Classe: ELF64


6
2018-06-07 08:50



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
2018-04-10 16:49



Sous Windows 7 dans le "Panneau de contrôle" en dessous de "Programmes | Programmes et fonctionnalités"les variantes 64 bits de JRE & JDK sont listées avec"64 bits"entre parenthèses (par exemple"Kit de développement Java SE 7 Update 65 (64 bits)"), tandis que pour les variantes 32 bits, la variante n'est pas mentionnée entre parenthèses (par exemple"Kit de développement Java SE 8 Update 60").


1
2017-09-06 20:54



Pour obtenir la version de JVM en cours d'exécution du programme

System.out.println(Runtime.class.getPackage().getImplementationVersion());

0
2017-09-12 18:54