Java: ¿Cómo maneja la máquina virtual un "long" de 64 bits en un procesador de 32 bits?

StackOverflow https://stackoverflow.com/questions/237309

  •  04-07-2019
  •  | 
  •  

Pregunta

¿Cómo maneja la JVM una primitiva " long " ;, que es de 64 bits, en un procesador de 32 bits?


¿Puede utilizar múltiples núcleos en paralelo cuando está en una máquina Multi-Core de 32 bits?
¿Cuánto más lentas son las operaciones de 64 bits en una máquina de 32 bits?

¿Fue útil?

Solución

Puede usar múltiples núcleos para ejecutar subprocesos diferentes, pero no los usa en paralelo para cálculos de 64 bits. Un largo de 64 bits se almacena básicamente como dos ints de 32 bits. Para agregarlos, se necesitan dos adiciones, manteniendo un registro 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 en la base 10. Por lo tanto, para otras operaciones aritméticas.

Editar sobre velocidad: solo puedo adivinar acerca de la diferencia de velocidad. Una adición requiere dos sumas en lugar de una, y una multiplicación (creo) requeriría cuatro multiplicaciones en lugar de una. Sin embargo, sospecho que si todo se puede mantener en registros, entonces el tiempo real para el cómputo se vería reducido por el tiempo requerido para ir a la memoria dos veces para la lectura y dos veces para la escritura, por lo que mi conjetura es aproximadamente el doble de tiempo para la mayoría operaciones Me 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 trabajo de cálculo de números, no me preocuparía. La mayoría de los programas pasan la mayor parte del tiempo esperando que IO salga del disco o la red.

Otros consejos

De Talkingtree y las Preguntas frecuentes sobre Java HotSpot :

  

En general, los beneficios de poder manejar grandes cantidades de memoria vienen con una pequeña pérdida de rendimiento en máquinas virtuales de 64 bits en lugar de ejecutar 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 ligeramente 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, la máquina virtual Java 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 en comparación con una plataforma de 32 bits en SPARC es del orden de una degradación del 10-20% cuando se pasa 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 su aplicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top