tengo saber que por jdk instalado descargar como java jvm jni 64bit 32-bit

java - saber - jdk



¿Cómo puedo saber si estoy ejecutando JVM de 64 bits o JVM de 32 bits(desde dentro de un programa)? (10)

En Linux, puede obtener información de encabezado de ELF utilizando cualquiera de los dos comandos siguientes:

file {YOUR_JRE_LOCATION_HERE}/bin/java

o / p: ejecutable de LSB de ELF de 64 bits , AMD x86-64, versión 1 (SYSV), para GNU / Linux 2.4.0, enlazado dinámicamente (usa bibliotecas compartidas), para GNU / Linux 2.4.0, no despojado

o

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

o / p: Clase: ELF 64

¿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, ¿a qué función o preferencia accedo para detectar esto dentro del programa?


En Windows 7, en el " Panel de control ", en " Programas | Programas y características ", las variantes de 64 bits de JRE y JDK se enumeran con " 64 bits " entre paréntesis (por ejemplo, " Java SE Development Kit 7 Update 65 (64-Bit ) "), mientras que para las variantes de 32 bits, la variante no se menciona entre paréntesis (por ejemplo, solo" Java SE Development Kit 8 Update 60 ").


Información complementaria:

En un proceso en ejecución puede usar (al menos con algunas versiones recientes 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

donde 14680 es PID de jvm ejecutando la aplicación. "os.arch" también funciona.

También se admiten otros escenarios:

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

Sin embargo considera también esta nota:

" NOTE : esta utilidad no es compatible y puede estar disponible o no en futuras versiones del JDK. En los sistemas Windows donde dbgent.dll no está presente, es necesario instalar ''Debugging Tools for Windows'' para que funcionen estas herramientas. La variable de entorno PATH debe contener la ubicación de jvm.dll utilizada por el proceso de destino o la ubicación desde la que se produjo el archivo de volcado de memoria ".


Para Windows , puede comprobar la ubicación de inicio de Java . Si contiene (x86) es de 32-bit contrario es de 64-bit :

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

Ejemplo de rutas:

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

¿Por qué preocuparse por una solución solo para Windows ?

Si necesita saber qué versión de bit está ejecutando, es probable que esté jugando con el código nativo en Windows por lo que la independencia de la plataforma está fuera de la ventana de todos modos.


Para obtener la versión de JVM actualmente ejecutando el programa

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


Puedes probar en la línea de comando:

java -d64 -version

Si no es una versión de 64 bits, recibirá un mensaje que se parece a:

Esta instancia de Java no admite una JVM de 64 bits. Por favor, instale la versión deseada.

Consulte las opciones de ayuda de la JVM para obtener más información java -help


Si está utilizando JNA, puede verificar si com.sun.jna.Native.POINTER_SIZE == 4 (32 bit) o com.sun.jna.Native.POINTER_SIZE == 8 (64 bit)


Solo escribe java -version en tu consola.

Si se está ejecutando una versión de 64 bits, recibirá un mensaje como:

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)

Una versión de 32 bits mostrará algo similar a:

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)

Tenga en cuenta Client lugar de 64-Bit Server de 64-Bit Server en la tercera línea. La parte Client/Server es irrelevante, lo que importa es la ausencia de los 64-Bit .

Si hay varias versiones de Java instaladas en su sistema, navegue a la carpeta / bin de la versión de Java que desea verificar y escriba java -version allí.


Sun tiene una propiedad del sistema Java para determinar el bitness de la JVM: 32 o 64:

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

Puedes usar

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

para determinar si es 32/64 del programa.

De las preguntas frecuentes de Sun HotSpot :

Al escribir código Java, ¿cómo distingo entre operación de 32 y 64 bits?

No hay 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 escritura una vez, ejecute en cualquier lugar la tradición. Sin embargo, si desea escribir código que sea específico de la plataforma (es una pena para usted), la propiedad del sistema sun.arch.data.model tiene el valor "32", "64" o "desconocido".

La única buena razón es si su código Java depende de las bibliotecas nativas y su código debe determinar qué versión (32 o 64 bits) debe cargarse en el inicio.


Actualizar de nuevo :

Instalé la JVM de 32 bits y la volví a intentar, parece que lo siguiente indica que el bit de JVM, no el arco del SO:

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

Esto se probó contra SUN e IBM JVM (32 y 64 bits). Claramente, la propiedad del sistema no es solo el arco del sistema operativo.