¿Funcionará el código Java creado y compilado con un JDK de 32 bits en un código de bytes de 32 bits en una JVM de 64 bits? ¿O una JVM de 64 bits requiere un código de bytes de 64 bits?
Para dar un poco más de detalle, tengo un código que funcionaba en un entorno Solaris con una JVM de 32 bits, pero ahora tengo problemas después de actualizar JDK y Weblogic Server a 64 bits.
Respuestas:
Sí, el código de bytes de Java (y el código fuente) es independiente de la plataforma, suponiendo que utilice bibliotecas independientes de la plataforma. 32 frente a 64 bits no deberían importar.
fuente
javac
aprovechará la memoria disponible con 64 bitsjava
?Ejecuté accidentalmente nuestra aplicación (más grande) en una máquina virtual de 64 bits en lugar de una máquina virtual de 32 bits y no me di cuenta hasta que algunas bibliotecas externas (llamadas por JNI) comenzaron a fallar.
Los datos serializados en una plataforma de 32 bits se leyeron en la plataforma de 64 bits sin ningún problema.
¿Qué tipo de problemas tienes? ¿Funcionan algunas cosas y otras no? ¿Ha intentado conectar JConsole, etc. y tiene un pico alrededor?
Si tiene una máquina virtual muy grande, es posible que los problemas de GC en 64 bits puedan afectarlo.
fuente
Sí a la primera pregunta y no a la segunda pregunta; es una máquina virtual. Sus problemas probablemente estén relacionados con cambios no especificados en la implementación de la biblioteca entre versiones. Aunque podría ser, digamos, una condición de carrera.
Hay algunos obstáculos por los que tiene que pasar la VM. En particular, las referencias se tratan en los archivos de clases como si ocuparan el mismo espacio que
int
s en la pila.double
ylong
ocupa dos espacios de referencia. Por ejemplo, en los campos, hay una reordenación por la que normalmente pasa la VM de todos modos. Todo esto se hace (relativamente) de forma transparente.Además, algunas JVM de 64 bits utilizan "oops comprimidos". Debido a que los datos se alinean aproximadamente cada 8 o 16 bytes, tres o cuatro bits de la dirección son inútiles (aunque se puede robar un bit de "marca" para algunos algoritmos). Esto permite que los datos de direcciones de 32 bits (por lo tanto, usan la mitad de ancho de banda y, por lo tanto, más rápido) utilicen tamaños de pila de 35 o 36 bits en una plataforma de 64 bits.
fuente
Todo el código de bytes se basa en 8 bits. (Por eso se llama código BYTE) Todas las instrucciones son múltiplos de 8 bits de tamaño. Desarrollamos en máquinas de 32 bits y ejecutamos nuestros servidores con JVM de 64 bits.
¿Podría darnos algún detalle del problema al que se enfrenta? Entonces podríamos tener la oportunidad de ayudarlo. De lo contrario, estaríamos adivinando cuál es el problema que tiene.
fuente
A menos que tenga un código nativo (código de máquina compilado para una arcitechture específica), su código se ejecutará igualmente bien en una JVM de 32 y 64 bits.
Sin embargo, tenga en cuenta que debido a las direcciones más grandes (32 bits son 4 bytes, 64 bits son 8 bytes), una JVM de 64 bits requerirá más memoria que una JVM de 32 bits para la misma tarea.
fuente
La diferencia de 32 bits frente a 64 bits se vuelve más importante cuando se interactúa con bibliotecas nativas. Java de 64 bits no podrá interactuar con una dll que no sea de Java de 32 bits (a través de JNI)
fuente
Agregue un parámetro como se muestra a continuación en la configuración mientras crea el exe
http://www.technimi.com/index.php?do=/group/java/forum/building-an-exe-using-launch4j-for-32-bit-jvm/
Espero que ayude.
Gracias...
/ jav
fuente
La JNI de Java requiere bibliotecas de SO del mismo "bittiness" que la JVM. Si intenta crear algo que dependa, por ejemplo, de IESHIMS.DLL (vive en% ProgramFiles% \ Internet Explorer), debe tomar la versión de 32 bits cuando su JVM es de 32 bits, la versión de 64 bits cuando su JVM es de 64 bits. Lo mismo ocurre con otras plataformas.
Aparte de eso, deberías estar listo. El código de bytes Java generado es el mismo.
Tenga en cuenta que debe usar el compilador Java de 64 bits para proyectos más grandes porque puede utilizar más memoria.
fuente
yo donde esta mal! A este tema le escribí una pregunta a Oracle. La respuesta fue.
"Si compila su código en una máquina de 32 bits, su código solo debe ejecutarse en un procesador de 32 bits. Si desea ejecutar su código en una JVM de 64 bits, debe compilar sus archivos de clase en una máquina de 64 bits utilizando una -Bit JDK ".
fuente