Siguiendo mi pregunta sobre si el CLR could use compressed pointers, la respuesta fue que no tiene sentido. Aún así, algunas JVM lo están implementando, entonces, ¿cuáles son los beneficios concretos de esta optimización, ya que ganar 4 bytes no parece valer la pena?¿Cuál es el propósito de los punteros de objetos comprimidos?
Respuesta
Hay un gran valor en las referencias comprimidas. Primero, en x86, los modos de 64 bits desbloquean 8 nuevos registros para ser usados, lo cual es una gran ganancia de rendimiento. En segundo lugar, el uso de encabezados de 4 bytes en lugar de 8 bytes/punteros de objeto mejora significativamente la eficacia de la memoria caché. Vemos ventajas en el mundo real en IBM Java del orden de ~ 5-10% con respecto a una JVM "completa" de 64 bits (su kilometraje variará). Esto hace que moverse a montones "pequeños de 64 bits" sea algo sencillo e indoloro, superando el límite de memoria de ~ 2 gb en las JVM de 32 bits. (el límite real de 32 bits podría estar entre 1700mb y ~ 3.7gb dependiendo del SO).
Si su objetivo principal es evitar colecciones de basura por completo, o al menos tener ejecuciones de GC menos frecuentes, vale la pena, ya que puede conducir a huellas de memoria sustancialmente inferiores.
Puede obtener 4 bytes de cada referencia de objeto. Si el objeto tiene más referencias, es común en el objeto java, puede guardar más memoria. El tamaño pequeño del objeto podría causar 2 resultados, primero, el tiempo de pausa del GC se reduce. Segundo, la tasa de aciertos de caché aumenta. Así que la aplicación Java podría obtener una mejora en el rendimiento. Para la prueba comparativa, habilitar CompressedOops podría mejorar el rendimiento en un 5% ~ 10%.
- 1. ¿Cuál es el punto de los punteros?
- 2. ¿Cuál es el propósito de los conjuntos de datos?
- 3. ¿Cuál es el propósito de Anorm's Pk?
- 4. ¿Cuál es el propósito de config.assets.precompile?
- 5. ¿Cuál es el propósito de String.IsInterned?
- 6. ¿Cuál es el propósito de __cxa_pure_virtual?
- 7. ¿Cuál es el propósito de los tipos anónimos?
- 8. ¿Cuál es el propósito de los Atributos en C#?
- 9. ¿Cuál es el propósito de los archivos pdb?
- 10. ¿Cuál es el propósito de los archivos .edmx?
- 11. ¿Cuál es el propósito de 'Class.forName ("MY_JDBC_DRIVER")'?
- 12. ¿Cuál es el propósito de Active Records?
- 13. ¿Cuál es el propósito de precompiledApp.config?
- 14. ¿Cuál es el propósito de 'var'?
- 15. ¿Cuál es el propósito de Function.const?
- 16. ¿Cuál es el propósito de Mage_Core_Block_Template_Facade
- 17. ¿Cuál es el propósito de :: en C#?
- 18. ¿cuál es el propósito de glClear (GL_DEPTH_BUFFER_BIT)
- 19. ¿Cuál es el propósito de layout.xml?
- 20. ¿Cuál es el propósito de git-mv?
- 21. ¿Cuál es el propósito de `qt_noop`
- 22. ¿Cuál es el propósito de requestWindowFeature()?
- 23. ¿Cuál es el propósito de Rake?
- 24. ¿Cuál es el propósito de JNDI
- 25. ¿Cuál es el propósito de IntentSender?
- 26. ¿Cuál es el propósito de utilizar NSOrderedSame?
- 27. ¿Cuál es el propósito de 'n = n'?
- 28. ¿Cuál es el propósito de Membership.ValidateUser()
- 29. ¿Cuál es el propósito de Ext.require
- 30. ¿Cuál es el propósito de Array.GetLowerBound (int)?