Las clases valor en Valhalla siguen necesitando el apoyo del compilador

Fuentes: Value Classes Still Need Compiler Sympathy

El proyecto Valhalla acerca su mayor hito al integrarse como función de previsualización en JDK 28: las clases valor (value classes), contempladas en la JEP 401. Esta característica permite renunciar a la identidad de los objetos y, con ello, abrir nuevas vías de optimización en la JVM, como el aplanamiento (flattening), la scalarización en registros y pila, y un análisis de escape trivial. Sin embargo, el artículo advierte de que no basta con marcar cualquier clase como valor para obtener mejoras automáticas; el rendimiento puede incluso caer si se mezcla código optimizable con código que obliga a la JVM a alternar entre representación aplanada y por referencia. A través de tres ejemplos se ilustran tanto las capacidades como las limitaciones actuales. El primero muestra cómo un campo final estrictamente inicializado, gracias a la JEP 539, admite un layout aplanado no atómico, mientras que un campo mutable del mismo tamaño se almacena como referencia para evitar lecturas y escrituras con tearing. El segundo ejemplo demuestra que, al eliminar la identidad, el compilador C2 puede fusionar un bucle que crea objetos en cada iteración hasta convertirlo en unas pocas instrucciones (mov, cmp, add, ret), algo que no logra cuando la clase mantiene identidad. El tercero analiza el impacto de la type erasure en código genérico y muestra cómo, en ciertos casos, vuelve a forzar asignaciones en el bucle. La conclusión es clara: las clases valor ofrecen garantías semánticas que permiten optimizaciones profundas, pero su uso debe ir acompañado de código pensado para que el compilador pueda explotarlas.