JDK 28 toma forma: lo que ya está dentro a 26 de septiembre
Seis JEPs asignados a JDK 28 y un séptimo en revisión. Value objects en preview, JSON en incubadora, PEM definitivo, Shenandoah generacional por defecto y el aviso de retirada de macOS/x64.
A 26 de septiembre de 2026, la página de JDK 28 lista seis JEPs asignados y un séptimo en revisión. JDK 27 salió hace once días y la siguiente versión ya tiene cosas serias dentro: los primeros value objects de Valhalla, un parser de JSON en el JDK y una API de criptografía que deja de ser preview. Las builds de acceso anticipado ya están disponibles.
Esto es una foto del momento. La lista irá creciendo en los próximos meses, y lo que aquí ves es el estado que marca la página de cada JEP hoy.
Para tu código
- JEP 401 — Value Objects (preview). Objetos sin identidad,
==que compara por valor y 30 clases de la plataforma (Integer,Optional,LocalDate…) convertidas en value classes cuando activas la preview. Lo contamos a fondo en Valhalla llega a JDK 28. - JEP 540 — Simple JSON API (incubadora). Parsear y generar JSON sin dependencias externas, en el módulo
jdk.incubator.json. Lo tienes en JSON en el JDK. - JEP 542 — Codificación PEM de objetos criptográficos (definitiva). Convierte claves, certificados y listas de revocación al formato PEM y al revés, con
PEMEncoder,PEMDecoderyPEM. Tras tres previews (JEP 470 en JDK 25, JEP 524 en JDK 26 y JEP 538 en JDK 27), se cierra sin cambios respecto a la última: si ya la probaste, tu código sirve tal cual y deja de necesitar--enable-preview.
En la JVM
- JEP 535 — Shenandoah generacional por defecto. El valor por defecto de
ShenandoahGCModepasa desatbagenerational. Con-XX:+UseShenandoahGCa secas ya obtienes el modo generacional; si fuerzas-XX:ShenandoahGCMode=satb, sigue funcionando, pero con un aviso de que ese modo está deprecado para su retirada. Si no usas Shenandoah, no te afecta. - JEP 539 — Strict Field Initialization in the JVM (preview). Es la pieza de la JVM que necesitan los value objects: campos que no se pueden leer antes de inicializarse. No cambia el lenguaje y no tienes que hacer nada.
Plataformas
- JEP 541 — macOS/x64, deprecado para su retirada. Apple ha pasado a AArch64 y deja de dar soporte a x64, y los ingenieros de Oracle dejan de mantener el port a partir de JDK 27. Compilar el JDK para macOS/x64 ahora falla en la configuración salvo que pases
--enable-deprecated-ports, y aun así sin garantía de que compile ni de que funcione. Si en tu CI todavía hay Macs Intel, empieza a planificar.
Pendiente de confirmar: JEP 544
El JEP 544, Ahead-of-Time Code Compilation, está en Proposed to Target: la revisión termina el 28 de septiembre de 2026 y todavía no está confirmado para JDK 28.
Es la tercera entrega de una serie. El JEP 483 (JDK 24) adelantó la carga y el enlazado de clases a una caché AOT, y el JEP 515 (JDK 25) guardó en ella perfiles de ejecución. El 544 da el siguiente paso: compilar código nativo durante un entrenamiento y guardarlo en la caché, sin renunciar al JIT si la carga cambia en producción.
# Entrenamiento
java -XX:AOTCacheOutput=app.aot -cp app.jar com.example.App
# Producción
java -XX:AOTCache=app.aot -cp app.jar com.example.AppEl estado de cada JEP, hoy
- JEP 401: Integrated.
- JEP 535: Targeted.
- JEP 539: Integrated.
- JEP 540: Integrated.
- JEP 541: Completed.
- JEP 542: Completed.
- JEP 544: Proposed to Target.
Recuerda que preview e incubadora no son lo mismo: una preview se activa con --enable-preview y una incubadora con --add-modules. Ninguna de las dos es para producción.