Oracle tomó hace tiempo la decisión de acelerar el desarrollo de sus implementaciones de Java, lo que se ha traducido en el lanzamiento de una nueva versión del JDK cada pocos meses. De hecho, desde hace unos días está disponible la duodécima versión de la tecnología que nos ocupa.
En primer lugar, recordamos que JDK 12 (o Java 12 para referirse a él de forma más coloquial) no es una versión LTS, como sí lo son la 8 y la 11. Pese a ello, eso no significa que este lanzamiento no traiga novedades de interés. Lo primero que se ha destacado en el anuncio oficial es que recibirá en los próximos meses al menos dos actualizaciones siguiendo el programa de Parches de Actualizaciones Críticas (CPU) de Oracle, las cuales llegarán antes de la publicación de JDK 13 en septiembre de 2019.
Además de las actualizaciones críticas que recibirá antes del lanzamiento de Java 13, de la versión 12 se puede destacar lo siguiente:
- Expresiones Switch (JEP 325): Esta característica ha sido introducida en fase preview (JEP 12) y extiende la sentencia «switch» para que pueda ser usada como una sentencia o una expresión. Ambas formas pueden tener un comportamiento de alcance y flujo de control “tradicional” o “simplificado”. Estos cambios simplificarán la escritura de código diaria y también prepararán el camino para el uso de la coincidencia de patrones (JEP 305) en «switch».
- Colecciones Abortables Mixtas para G1 (JEP 344): Hace que las colecciones abortables mixtas de G1 se puedan cancelar si superan el objetivo de la pausa.
- Devolución rápida de la memoria comprometida no utilizada en G1 (JEP 346): Mejora el recolector de basura G1 para devolver automáticamente un conjunto de memoria de Java al sistema operativo cuando está inactivo.
- El recolector de basura de bajo tiempo de pausa Shenandoah (JEP 189): Agrega un nuevo algoritmo de recolector de basura que reduce los tiempos de pausa del propio recolector mediante un trabajo de evacuación concurrente con los hilos de Java en ejecución. Esta característica se ha incluido en fase experimental.
- Microbenchmark suite (JEP 230): Se ha añadido una suite de microbenchmarks al código fuente del JDK, y la intención de la inclusión de esta característica es hacer más fácil a los desarrolladores ejecutar microbenchmarks existentes y poder crear otros nuevos.
- API de constantes en la JVM (JEP 334): Se ha introducido una API para modelar descripciones nominales de archivos de clase clave y artefactos de tiempos de ejecución, en particular las constantes que se pueden cargar desde la agrupación constante.
- Un único port a AArch64 (JEP 340): Elimina todas las fuentes relacionadas con el port a ARM64 mientras se mantiene los ports de ARM 32-bit y aarch64 64-bit, todo con el fin de que los desarrolladores se centren en una única implementación de ARM 64-bit.
- Archivos CDS por defecto (JEP 341): Mejora el proceso de compilación del JDK a la hora de generar un archivo CDS (Clase de Compartición de Datos) usando la lista de clases predeterminada en plataformas de 64-bit.
Java 12 está disponible en el sitio web de Oracle bajo licencia comercial y como software libre bajo licencia GPLv2 a través del proyecto OpenJDK. Sin embargo, posiblemente la instalación de OpenJDK fuera de Linux no resulte muy amigable para el usuario, motivo por el cual existe la iniciativa Adopt OpenJDK, desde donde se pueden adquirir binarios precompilados. Aprovechamos para recordar que Java no ha dejado de ser gratuito pese al cambio de licencia de la versión comercial.
Además del anuncio oficial, los detalles completos de Java 12 (o JDK 12) pueden ser consultados en las notas de lanzamiento.