Tecnología

Java 27 elimina el GC que congelaba las apps y baja la memoria de objetos un 33%

Adrian Kessler
Añádenos en Google

Java 27 llega con dos cambios que llegarán silenciosamente a toda JVM en ejecución en cualquier lugar. El recolector de basura G1 ahora es el predeterminado en todo runtime de Java — terminando con el persistente recolector Serial que detiene el mundo en hardware limitado — y los encabezados de objetos se han reducido de 96 bits a 64 bits, recortando la sobrecarga en un tercio para cualquier aplicación que cree cantidades significativas de objetos.

El recolector Serial era el GC más antiguo de Java: simple, predecible y brutal. Cuando se ejecutaba, congelaba toda la aplicación hasta que el heap quedaba limpio. En servidores de mucha memoria y múltiples CPU, esa compensación se volvió insostenible hace años — G1 reemplazó a Serial como predeterminado para servidores a partir de Java 9. Los entornos limitados continuaron ejecutando Serial hasta Java 26: máquinas de un solo CPU, VMs pequeñas en la nube, sistemas embebidos con poca memoria. Ese valor predeterminado termina con Java 27.

G1 divide el heap en regiones pequeñas y las recolecta de forma incremental, priorizando las secciones con más basura primero — de ahí Garbage-First. Las pausas aún existen, pero son más cortas y predecibles que una recolección completa de Serial. Oracle afirma que G1 ahora es competitivo con Serial en todos los tamaños de heap. Para los desarrolladores que implementan aplicaciones en las instancias de nube más baratas disponibles — un CPU, un gigabyte de RAM — Java 27 elimina una fricción con la que han vivido durante años.

El cambio de encabezados de objetos compactos es la otra mitad de este lanzamiento. Los objetos de Java llevan metadatos — información de tipo, códigos hash, estado de bloqueo — almacenados en un encabezado adjunto a cada objeto. El formato anterior usaba 96 bits. Java 27 comprime esto a 64 bits, una reducción del 33% por objeto. Para aplicaciones que crean millones de objetos — colas de mensajes, libros contables financieros, microservicios basados en eventos — el efecto acumulativo es medible: heap más denso, mejor uso de la caché de la CPU, menos ciclos de recolección necesarios.

Ambos cambios tienen advertencias. Las aplicaciones ajustadas explícitamente para el comportamiento de Serial GC pueden ver diferencias inesperadas de temporización después de la actualización. G1 usa más memoria para la contabilidad que Serial, lo que importa en entornos con presupuestos de memoria realmente ajustados — aunque las pruebas de Oracle indican que la compensación en rendimiento es insignificante para la mayoría de las cargas de trabajo. Los equipos de desarrollo que implementen Java 27 en sistemas limitados deben probar los nuevos valores predeterminados antes del lanzamiento. La transición es automática, pero no es invisible.

Java 27 también agrega intercambio de claves híbrido post-cuántico para TLS 1.3, implementando el algoritmo ML-KEM junto con el intercambio de curva elíptica X25519 existente. Las conexiones TLS negociadas hoy podrían, en teoría, ser capturadas y descifradas más tarde por una futura computadora cuántica. El intercambio de claves híbrido defiende contra eso al requerir que un atacante rompa tanto un algoritmo clásico como uno post-cuántico simultáneamente — una adición significativa para cualquier servicio Java que maneje datos sensibles.

Java 27 fue lanzado el 15 de septiembre de 2026, siguiendo la cadencia de seis meses de la plataforma. La concurrencia estructurada y las constantes perezosas continúan como características preliminares en esta versión. Se espera que la próxima versión de soporte a largo plazo de la serie Java sea en 2027.

Etiquetas: , , , , ,

Añádenos en Google

Discussion

There are 0 comments.