¿Cómo puedo saber si estoy ejecutando JVM de 64 bits o JVM de 32 bits (desde dentro de un programa)?
¿Cómo puedo saber si la JVM en la que se ejecuta mi aplicación es de 32 bits o de 64 bits? Específicamente, ¿qué funciones o propiedades puedo usar para detectar esto dentro del programa?
Para ciertas versiones de Java, puede verificar el bitness de la JVM desde la línea de comando con las banderas -d32
y -d64
.
$ java -help
...
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
Para comprobar si hay una JVM de 64 bits, ejecute:
$ java -d64 -version
Si no es una JVM de 64 bits, obtendrás esto:
Error: This Java instance does not support a 64-bit JVM.
Please install the desired version.
De manera similar, para buscar una JVM de 32 bits, ejecute:
$ java -d32 -version
Si no es una JVM de 32 bits, obtendrás esto:
Error: This Java instance does not support a 32-bit JVM.
Please install the desired version.
Estas banderas se agregaron en Java 7, quedaron obsoletas en Java 9, se eliminaron en Java 10 y ya no están disponibles en las versiones modernas de Java.
Recuperas la propiedad del sistema que marca el bitness de esta JVM con:
System.getProperty("sun.arch.data.model");
Los posibles resultados son:
"32"
– JVM de 32 bits"64"
– JVM de 64 bits"unknown"
– JVM desconocida
Como se describe en las preguntas frecuentes de HotSpot :
Al escribir código Java, ¿cómo distingo entre operaciones de 32 y 64 bits?
No existe una API pública que le permita distinguir entre operaciones de 32 y 64 bits. Piense en 64 bits como una plataforma más en la tradición de escribir una vez y ejecutar en cualquier lugar. Sin embargo, si desea escribir código que sea específico de la plataforma (qué vergüenza), la propiedad del sistema sun.arch.data.model tiene el valor "32", "64" o "desconocido".
Un ejemplo en el que esto podría ser necesario es si su código Java depende de bibliotecas nativas y necesita determinar si desea cargar la versión de 32 o 64 bits de las bibliotecas al inicio.