saber - Java: ¿Cómo maneja la VM un `largo` de 64 bits en un procesador de 32 bits
pruebe java (2)
De TalkingTree , y las preguntas frecuentes de Java HotSpot :
En general, los beneficios de poder abordar grandes cantidades de memoria vienen con una pequeña pérdida de rendimiento en máquinas virtuales de 64 bits en comparación con la ejecución de la misma aplicación en una máquina virtual de 32 bits. Esto se debe al hecho de que cada puntero nativo en el sistema ocupa 8 bytes en lugar de 4. La carga de estos datos adicionales tiene un impacto en el uso de la memoria, lo que se traduce en una ejecución levemente más lenta dependiendo de cuántos punteros se carguen durante la ejecución de tu programa Java
La buena noticia es que con las plataformas AMD64 y EM64T que se ejecutan en modo de 64 bits, Java VM obtiene algunos registros adicionales que puede usar para generar secuencias de instrucciones nativas más eficientes. Estos registros adicionales aumentan el rendimiento hasta el punto donde a menudo no hay pérdida de rendimiento cuando se compara la velocidad de ejecución de 32 a 64 bits.La diferencia de rendimiento que compara una aplicación que se ejecuta en una plataforma de 64 bits con una plataforma de 32 bits en SPARC es del orden del 10-20% de degradación cuando se mueve a una máquina virtual de 64 bits . En las plataformas AMD64 y EM64T, esta diferencia varía de 0 a 15% dependiendo de la cantidad de puntero que acceda a la aplicación.
¿Cómo maneja la JVM una primitiva "larga", que es de 64bits, en un procesador de 32 bits?
¿Puede utilizar núcleos múltiples en paralelo cuando se usa una máquina de 32 bits de múltiples núcleos?
¿Cuánto más lento son las operaciones de 64 bits en una máquina de 32 bits?
Puede usar múltiples núcleos para ejecutar diferentes hilos, pero no los usa en paralelo para cálculos de 64 bits. Un bit de 64 bits básicamente se almacena como dos entradas de 32 bits. Para agregarlos, se necesitan dos adiciones, haciendo un seguimiento del bit de acarreo. La multiplicación es como multiplicar dos números de dos dígitos, excepto que cada dígito está en la base 2 ^ 32 en lugar de la base 10. Y así sucesivamente para otras operaciones aritméticas.
Editar sobre la velocidad: solo puedo adivinar la diferencia de velocidad. Una adición requiere dos adiciones en lugar de una, y una multiplicación (creo) requiere cuatro multiplicaciones en lugar de una. Sin embargo, sospecho que si todo puede guardarse en registros, el tiempo real para el cálculo quedaría eclipsado por el tiempo requerido para ir a la memoria dos veces para la lectura y dos para la escritura, por lo que mi conjetura es aproximadamente el doble que la mayoría operaciones. Imagino que dependería del procesador, la implementación particular de JVM, la fase de la luna, etc. A menos que esté haciendo un gran número de crujidos, no me preocuparía. La mayoría de los programas pasan la mayor parte del tiempo esperando que IO llegue o salga del disco o de la red.