Los value classes aún necesitan la complicidad del compilador

Value Classes Still Need Compiler Sympathy

Con la integración de JEP 401 en JDK 28, los value classes prometen optimizaciones significativas, pero no son una varita mágica. Un programa bien intencionado puede llevar a la JVM a situaciones donde la representación aplanada es más rápida para algunos métodos y la de referencia para otros, forzando conversiones costosas. Este análisis técnico muestra con ejemplos concretos cómo la inmutabilidad permite el aplanamiento no atómico, cómo la eliminación de identidad elimina asignaciones, y cómo la borradura de tipos puede reintroducirlas en llamadas megamórficas. Incluye una inmersión profunda en un caso real de regresión de rendimiento al convertir records a value records.

Quiero que los value classes sean más que magia, así que hoy voy a mostrarte de qué es capaz la JVM ahora mismo y dónde están sus limitaciones.
  1. DarkNova6

    Buena visión técnica, y estoy totalmente de acuerdo con el sentimiento de la conclusión al final:

    ```

    Declarar una clase de valor es ante todo una decisión semántica. Le dice a nuestros compañeros programadores que sus instancias se definen enteramente por su estado y no necesitan identidad. ¡Ese modelo más claro es valioso en sí mismo! La libertad adicional de la JVM para optimizar cómo se representan esos valores es una ventaja bienvenida.

    ```

    Muchos desarrolladores parecen pensar que "go value go broom", pero la verdad es mucho más matizada y la idea no debería ser pensar en "pero el rendimiento" sino en la naturaleza de tus datos subyacentes. Como mínimo, esto integra algunas lecciones básicas de DDD directamente en el lenguaje. Me alegro de que la rasgadura no esté activada por defecto precisamente por esta razón.

    Java siempre fue un lenguaje orientado a facilitar el uso de bibliotecas, depositando mucha fe en el autor de la biblioteca y en un fuerte encapsulamiento. Ahora, los expertos pueden obtener significativamente más rendimiento de la JVM, mientras que los programadores más humildes evitan crear errores que no esperarían.

  2. aatd86

    Por supuesto que lo hacen, independientemente del lenguaje. Por eso tenemos cosas como el internado de cadenas, por ejemplo. :)

  3. ferrule

    El análisis de escape haciendo el trabajo pesado aquí. Hasta que sea completamente confiable, todavía estás adivinando la asignación.

  4. pan_lid

    El análisis de escape de la JVM siempre ha sido irregular. Me alegra ver que se vuelve más predecible.

  5. dist-epoch

    Desde su creación, la propuesta de Java fue "no te preocupes por cosas de bajo nivel como clases de valor/referencia, un Compilador Suficientemente Inteligente elegirá automáticamente la mejor opción según tu código y la creación de perfiles en tiempo de ejecución".

    ¿Qué cambió, por qué de repente adoptan características de C++ que excluyeron explícitamente?

    https://wiki.c2.com/?SufficientlySmartCompiler

Más de este día

2026-08-26