Siguiendo con su política de liberar versiones de la JDK cada 6 meses, establecida desde septiembre de 2017 con la presentación de la versión 9, Oracle acaba de liberar la JDK 12 (Java 12 en argot tecnológico). No se trata de una versión LTS como si lo fué la versión 11 y el soporte por lo tanto tendrá una duración de 6 meses.

No obstante Oracle a anunciado que presentará al menos dos actualizaciones antes de la próxima versión, la 13, que saldrá en septiembre de 2019.

Tal y como sucedió con la 10 y la 11, la mayor agilidad en las entregas no trae cambios tan revolucionarios como los aportados por otras versiones previas, como en el caso de la 5 y la aparición de las @anotaciones, la 8 con la incorporación de las lambda, interfaces funcionales y stream o la 9 con la inclusión de los módulos.

Las novedades aportadas con la nueva versión se centran principalmente en la mejora del rendimiento. En relación a la sintaxis aparece el nuevo switch con una mejora significativa de sus prestaciones. Por último, destacar la incorporación del encoding UTF-11, con nuevos caracteres de entre los que se incluyen una ampliación del catálogo de emojis.

Descripción de las principales novedades

  • Evolución de la sentencia switch (JEP 325). Al igual que en versiones anteriores, la 12 presenta una mejora funcional, aunque en modo experimental, para la sentencia switch. La nueva sintaxis permite por un lado la incorporación de lambas en los cases y por otro lado la posibilidad de retornar un valor. Ejemplo
  • Mejoras en el Garbagge colector.
    • Restauración inmediata al sistema operativo de la memoria inactiva contenida en el G1. (JEP 346)
    • Shenandoah. Nuevo algoritmo, en modo experimental, que optimiza los tiempos de pausa del propio GC, basado en concurrencia de hilos y que aumentando el rendimiento disminuye el tiempo de evacuación de memoria. (JEP 189)
    • Mejora del G1 en la gestión de las colecciones mixtas compuestas de regiones jovenes y viejas. Estas últimas se considerarán opcionales y solo se recolectarán si existe algún tiempo remanente sobre el total de la pausa máxima establecida. (JEP 344)
  • Suite para Microbenchmarks. Se potencia la medida del rendimiento de las aplicaciones mediante JMH con la inclusión de una suite que facilita la creación y modificación de benchmarks de manera sencilla a parte de aportar un catálogo de benchmarks ya construidos para su uso.
  • Archivos CDS por defecto. A diferencia de las versiones anteriores ya no es necesario cargar manualmente «class data sharing». Las aplicaciones java en esta versión comparten por defecto el archivo classes.jsa entre las diferentes JVM’s en ejecución mejorando la compilación el consumo de memoria y el tiempo de arranque. (JEP 341)
  • API de constantes en la JVM. Supone una mejora en la gestión de las constantes de carga pertenecientes a la pila de constantes , que mediante introspección podrán ser manipuladas a partir de su descripción nominal. El principal interés se encuentra en las constantes de carga de tiempo de ejecución que correspondan a clases o métodos. (JEP 230)

Enlaces de interés