HeadlinesBriefing favicon HeadlinesBriefing.com

JDK 28: Optimizaciones de Clases de Valor (JEP 401)

Hacker News •
×

Esta publicación discute las características de vista previa en JDK 28, específicamente JEP 401, un hito importante de Valhalla integrado como característica de vista previa. Las clases de valor aumentan la capacidad de comunicar la semántica del programa y las oportunidades de optimización disponibles para la JVM. Sin embargo, la creencia de que las clases ordinarias proporcionan un suelo de rendimiento y las clases de valor no pueden ir por debajo de él es infundada.

Un programa bien intencionado puede forzar a la JVM a convertir entre representaciones aplanadas y de referencia cuando los métodos interactúan, lo que puede anular los beneficios. La principal ventaja de optimización de las clases de valor es renunciar a la identidad, permitiendo que el tiempo de ejecución elija representaciones adecuadas, aplanar valores para evitar la persecución de punteros y escalarizar componentes en registros o en la pila. El análisis de escape se vuelve trivial sin el requisito de identidad.

La inmutabilidad permite el aplanamiento; JEP 539, Inicialización Estricta de Campos, permite a la JVM confiar en que un campo final se inicializa antes de que su objeto contenedor se vuelva observable. Dado que tal campo no puede actualizarse posteriormente, la JVM puede usar un diseño aplanado no atómico sin riesgo de asignación fragmentada. Los campos mutables deben preservar la asignación libre de fragmentación.

Si un campo mutable contiene un valor demasiado grande para una actualización aplanada atómica, la JVM debe usar un diseño de referencia. Considere un registro Four Longs con 32 bytes de carga útil; demasiado grande para una actualización aplanada atómica. Pero en un registro Envelope, la carga útil es un campo final estrictamente inicializado, permitiendo un diseño aplanado no atómico.

Si Envelope fuera mutable, el diseño revierte a REGULAR para mantener la consistencia.