para - java 7 download
Compatibilidad con Java de 32 bits frente a 64 bits (9)
¡Tu estabas equivocado! Para este tema, escribí una pregunta al oráculo. 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 usando un 64 -Bit JDK ".
¿Funcionará el código de Java creado y compilado contra un JDK de 32 bits en 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 que ejecutaba una JVM de 32 bits, pero ahora recibo problemas después de actualizar el servidor JDK y Weblogic a 64 bits.
A menos que tenga código nativo (código de máquina compilado para una edición de arco específica) su código funcionará igual de bien en una JVM de 32 y 64 bits.
Sin embargo, tenga en cuenta que, debido a las direcciones más grandes (32 bits es 4 bytes, 64 bits es 8 bytes), una JVM de 64 bits requerirá más memoria que una JVM de 32 bits para la misma tarea.
Accidentalmente ejecuté nuestra aplicación (de gran tamaño) 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 problemas.
¿Qué tipo de problemas estás recibiendo? ¿Funcionan algunas cosas y otras no? ¿Has intentado conectar JConsole, etc. y tener un pico alrededor?
Si tiene una máquina virtual muy grande, puede descubrir que los problemas de GC en 64 bits pueden afectarlo.
Agregue un parámetro como se indica a continuación en la configuración al crear el archivo exe
Espero que ayude.
Gracias...
/ jav
Java JNI requiere bibliotecas de sistema operativo con el mismo "bittiness" que la JVM. Si intenta construir algo que dependa, por ejemplo, en IESHIMS.DLL (vive en% ProgramFiles% / Internet Explorer), necesita 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. Del mismo modo para otras plataformas.
Aparte de eso, debes estar todo listo. El bytecode Java generado s / b es el mismo.
Tenga en cuenta que debe usar el compilador Java de 64 bits para proyectos más grandes, ya que puede ocupar más memoria.
La diferencia entre 32 bits y 64 bits se vuelve más importante cuando interactúa con bibliotecas nativas. 64 bits de Java no podrán interactuar con un dll de 32 bits que no sea Java (a través de JNI)
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, por ejemplo, una condición de carrera.
Hay algunos aros que la máquina virtual tiene que pasar. En particular, las referencias se tratan en archivos de clase como si tomaran el mismo espacio que int
en la pila. double
y long
ocupan dos ranuras de referencia. Para los campos de instancia, hay una reorganización de la máquina virtual por lo general pasa de todos modos. Todo esto se hace (relativamente) de manera transparente.
También algunas JVM de 64 bits usan "oops comprimidos". Debido a que los datos se alinean alrededor de cada 8 o 16 bytes, tres o cuatro bits de la dirección son inútiles (aunque un bit de "marca" puede ser robado para algunos algoritmos). Esto permite datos de direcciones de 32 bits (por lo tanto, utilizando la mitad del ancho de banda y, por lo tanto, más rápido) para usar tamaños de almacenamiento dinámico de 35 o 36 bits en una plataforma de 64 bits.
Sí, Java bytecode (y el código fuente) es independiente de la plataforma, suponiendo que utilice librerías independientes de la plataforma. 32 contra 64 bits no deberían importar.
Todo el código de bytes está basado en 8 bits. (Es por eso que se llama código BYTE) Todas las instrucciones son un múltiplo 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 que enfrenta? Entonces podríamos tener la oportunidad de ayudarte. De lo contrario, solo estaríamos adivinando cuál es el problema que estás teniendo.