El mayor cambio de lenguaje de Java en una década finalmente está llegando. Se necesitaron 197.000 líneas de código.
TL; DR
Las clases de valor del Proyecto Valhalla se están trasladando al JDK 28, un cambio de 197.000 líneas que reescribe cómo Java maneja las identidades de los objetos.
La ingeniera de software de Oracle, Lois Foltan, confirmó que la propuesta de mejora de Java 401, que introduce clases y objetos estándar en el lenguaje, se integrará en la línea principal de OpenJDK a principios del próximo mes, con miras a JDK 28. El cambio es parte del Proyecto Valhalla, un esfuerzo a largo plazo para abordar una de las limitaciones de rendimiento más antiguas de Java. Según The Register, la solicitud de extracción agregó más de 197.000 líneas de código en 1.816 archivos modificados.
Foltan lo describe como “Un gran cambioEn una publicación en la lista de correo de OpenJDK y durante la ventana de integración, se pide a otros confirmadores que eviten confirmaciones grandes. La versión actual del Java Development Kit 26, JDK 27 se espera para septiembre de 2026 y JDK 28 para marzo de 2027. JEP 401 vendrá como una función de vista previa, lo que significa que los desarrolladores no pueden optar por él, pero habilitarlo.
El problema de direccionamiento JEP 401 es fundamental para el funcionamiento de Java. Fuera de un conjunto pequeño como int, char y double, cada tipo en Java es un tipo de referencia. Esto significa que cada objeto obtiene su propia identidad única en la memoria, incluso cuando dos objetos contienen datos idénticos.
La clase LocalDate de Java, por ejemplo, almacena valores de fecha, pero comparar dos instancias que representan la misma fecha con el operador == devolverá falso porque son objetos diferentes en la memoria.
Las clases contenedoras de enteros lo hacen aún más confuso. Java almacena en caché internamente instancias de números enteros para valores inferiores a 128, por lo que dos objetos enteros con el mismo valor más pequeño pueden compararse con ==. Para valores mayores, == siempre devuelve falso incluso si los números subyacentes coinciden.
JEP 401 describe este comportamiento como "Complicaciones no deseadas,” y los editores de Java generalmente advierten contra el uso de == con números enteros resultantes.
Las clases de valor evitan este problema creando objetos que no tienen identidades absolutas. Un objeto de valor se distingue sólo por el valor de su campo, no por su ubicación en la memoria. Esto le da a la JVM la libertad de almacenar objetos valiosos, lo que reduce la sobrecarga de memoria y mejora la localidad de la caché.
Iterar sobre tipos de valores es más eficiente porque el tiempo de ejecución no necesita desreferenciar punteros para llegar a los datos reales.
JEP 401 migrará algunas clases JDK existentes, incluidos los números enteros, a clases de valores. Se espera que el número de clases transferidas aumente gradualmente en versiones posteriores. Los desarrolladores también podrán declarar sus propias clases de valores para tipos de dominio que representen cosas como datos puros, coordenadas, cantidades de moneda o marcas de tiempo.
El Proyecto Valhalla ha estado en desarrollo desde 2014, lo que lo convierte en uno de los esfuerzos de mayor duración en la historia de Java. La línea de tiempo explica la complejidad de cambiar cómo funcionan las identidades de objetos a nivel de JVM mientras se mantiene la compatibilidad con miles de millones de líneas de código Java existente. Algunos espectadores bromearon acerca de llegar a Valhalla, el reino más allá de la mitología nórdica, antes de que se lanzara el proyecto.
Brian Goetz, arquitecto del lenguaje Java de Oracle, advirtió en Reddit que JEP 401 es "La primera parte del Valhalla."Dice que eliminar la identidad es el primer obstáculo, lo que revela nuevas optimizaciones, especialmente para objetos pequeños. Pero tratar completamente los objetos con semántica de valor, incluidos los vacíos y lo que Goetz llama "seguridad-nuclear-bajo-nación."
Comparó Trajectory con estructuras de C# y señaló que otros lenguajes están trabajando en capacidades similares.
Goetz advirtió que Valhalla introduciría deliberadamente cambios perturbadores. El código que se sincroniza en un objeto Integer, por ejemplo, fallará con una excepción una vez que el valor Integer se convierta en una clase. Dijo que es probable que JEP 401 aún se muestre en una vista previa en la próxima versión de soporte a largo plazo del JDK, que se espera que sea el JDK 29 en septiembre de 2027.
"Se espera que salga de la previa el 29… con suerte,", escribió.
El momento llega cuando Oracle se reestructura agresivamente, recortando 30.000 empleados para financiar su pivote de infraestructura de IA. Pero el equipo de la Plataforma Java parece en gran medida inmune a estos recortes, y el Proyecto Valhalla representa un trabajo de lenguaje profundo que no se puede acelerar incorporando más ingenieros. Java ganará más de 8 millones de nuevos desarrolladores entre 2021 y 2023, y su relevancia para la computación en la nube y los sistemas empresariales significa que cualquier mejora fundamental del rendimiento se extenderá a todo un vasto ecosistema.
Para millones de desarrolladores de Java que han esperado doce años por tipos estándar, la vista previa de JDK 28 es un hito. Para el resto de Valhalla, el mensaje de Goetz es claro: no contengas la respiración.





