Tecnología

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

Adrian Kessler
Añádenos en Google

Java 27 llega con dos cambios que llegarán silenciosamente a todas las JVM que se ejecutan en cualquier lugar. El recolector de basura G1 es ahora el predeterminado en todos los entornos de ejecución de Java, acabando con el recolector Serial que detenía el mundo en hardware limitado, y las cabeceras de los objetos se han reducido de 96 bits a 64 bits, recortando la sobrecarga en un tercio para cualquier aplicación que cree un número significativo 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 se limpiaba el montón. En servidores con mucha memoria y múltiples CPU, ese intercambio se volvió insostenible hace años: G1 sustituyó a Serial como predeterminado en servidores a partir de Java 9. Los entornos limitados continuaron ejecutando Serial hasta Java 26: máquinas de un solo CPU, pequeñas VMs en la nube, sistemas embebidos con poca memoria. Ese predeterminado termina con Java 27.

G1 divide el montón en regiones pequeñas y las recolecta de forma incremental, priorizando las secciones con más basura primero, de ahí lo de Garbage-First. Las pausas siguen existiendo, 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 montón. Para los desarrolladores que despliegan aplicaciones en las instancias en la nube más baratas disponibles (un CPU, un gigabyte de RAM), Java 27 elimina una fricción con la que han estado viviendo durante años.

El cambio de cabeceras de objetos compactas es la otra mitad de esta versión. Los objetos de Java llevan metadatos (información de tipo, códigos hash, estado de bloqueo) almacenados en una cabecera adjunta a cada objeto. El formato antiguo usaba 96 bits. Java 27 lo comprime a 64 bits, una reducción del 33% por objeto. Para aplicaciones que crean millones de objetos (colas de mensajes, libros contables financieros, microservicios dirigidos por eventos), el efecto acumulativo es medible: montón más denso, mejor utilización de la caché de la CPU, menos ciclos de recolección necesarios.

Ambos cambios conllevan advertencias. Las aplicaciones ajustadas explícitamente para el comportamiento de Serial GC pueden experimentar diferencias de sincronización inesperadas tras la actualización. G1 usa más memoria para el mantenimiento de registros que Serial, lo que importa en entornos con presupuestos de memoria realmente ajustados, aunque las pruebas de Oracle indican que el intercambio de rendimiento es insignificante para la mayoría de las cargas de trabajo. Los equipos de desarrollo que desplieguen Java 27 en sistemas limitados deberían probar los nuevos predeterminados antes de publicar. La transición es automática, pero no es invisible.

Java 27 también añade 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 se defiende contra eso al exigir que un atacante rompa simultáneamente un algoritmo clásico y uno post-cuántico, una adición significativa para cualquier servicio de Java que maneje datos sensibles.

Java 27 fue lanzado el 15 de septiembre de 2026, siguiendo el ciclo 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 en la serie Java sea en 2027.

Etiquetas: , , , , ,

Añádenos en Google

Debate

Hay 0 comentarios.