Oracle ha publicado JDK 23, que dependiendo del prisma por el que se mire puede ser entendido como OpenJDK 23 o Java 23. Una vez más, recordamos que OpenJDK es la base de la implementación comercial de Java desde la versión 7, así que las dos grandes vertientes de la tecnología están sincronizadas desde hace muchos años.
Lo primero que nos encontramos es la introducción en fase previa de los tipos primitivos en los patrones (patterns), instancias de (instanceof
) y la sentencia switch
, cosa que tendría que eliminar varias restricciones presentes cuando se utilizan tipos primitivos en la coincidencia de patrones. El código que maneja tipos primitivos y tipos de objetos se puede simplificar cuando no se necesitan asignaciones especiales y ambos tipos se pueden manejar de la misma manera.
En segunda fase previa está la API Class-File (fichero de clase), de la cual ya expusimos en la entrada dedicada a JDK 22. Se trata de una API estándar para analizar, generar y transformar ficheros de clase de Java.
En tercer lugar están los comentarios del documento en Markdown, que, como bien indica su nombre, permiten utilizar Markdown en lugar de únicamente una combinación de etiquetas HTML y Javadoc para escribir los comentarios de Javadoc.
Y llegamos a un clásico de las entradas que le dedicamos a los lanzamiento de JDK: la API de vectores o API Vector, que en la versión 23 llega en octava fase de incubación. Esta API “permite a los desarrolladores de Java expresar cálculos vectoriales que se compilan de manera confiable en tiempo de ejecución en instrucciones vectoriales óptimas en arquitecturas de CPU compatibles, logrando así un rendimiento superior a los cálculos escalares equivalentes”. Se espera que siga en estado de incubación hasta que las características necesarias del Proyecto Valhalla estén disponibles.
En segunda fase previa están los recolectores de streams, los cuales mejoran la API de streams para soportar operaciones intermedias personalizadas y permiten que los pipelines de streams transformen los datos de maneras que no son fáciles de lograr con las operaciones intermedias existentes.
El modo predeterminado del recolector de basura Z (ZGC) ha sido cambiado al modo generacional debido a que se ha confirmado que su desempeño es superior al del modo no generacional en la mayoría de los casos. Además, este cambio establece al modo no generacional como obsoleto.
En fase previa han llegado las declaraciones de importación de módulos, que permiten a los desarrolladores importar todos los paquetes exportados por un módulo con una única instrucción, lo que simplifica la reutilización de las bibliotecas modulares sin necesidad de que el código de importación esté en el módulo.
En tercera fase previa han llegado tres cosas: las clases declaradas de manera implícita y métodos main
de instancia (implicit declared clases and instance main methods), la concurrencia estructurada y los valores de alcance (scoped values). La primera cosa abre la puerta a que los principiantes puedan escribir sus primeros programas en Java sin tener que comprender primero las características destinadas a programas más grandes y complejos; la segunda permite a los desarrolladores tratar grupos de tareas relacionadas que se ejecutan en diferentes subprocesos como una sola unidad de trabajo, agilizando así el manejo y la cancelación de errores y mejorando la confiabilidad; mientras que la tercera permite que un método comparta datos inmutables tanto con sus destinatarios dentro de un subproceso como con subprocesos secundarios.
Como última cosa destacada en el anuncio oficial de Java 23 están los cuerpos constructores flexibles, con los que es posible que algunas declaraciones en los constructores aparezcan antes de una invocación explícita del constructor con super(..)
o this(..)
, lo que da a los desarrolladores libertad para expresar mejor el comportamiento de los constructores.
Oracle recalca que Java 23 aporta un valor significativo a las organizaciones, ya que “es compatible con la reciente disponibilidad general de Java Management Service (JMS) 9.0, un servicio nativo de Oracle Cloud Infrastructure (OCI) que proporciona una consola y un panel de control unificados para ayudar a las organizaciones a gestionar los entornos de ejecución y las aplicaciones de Java en las instalaciones o en cualquier nube”.
Además, el gigante de las bases de datos menciona que “JMS 9.0 proporciona muchas mejoras de usabilidad, y Oracle JDK 23 proporciona más opciones para ajustar y mejorar el rendimiento máximo con la incorporación del compilador Graal, un compilador dinámico just-in-time (JIT) escrito en Java que transforma el código de bytes en código de máquina optimizado”.
Java sigue una cadencia de lanzamientos de seis meses desde hace bastante tiempo. Esto ha permitido a la tecnología evolucionar a mayor velocidad, pero con el coste de introducir una menor cantidad de novedades y cambios en cada versión. Por otro lado están las modificaciones introducidas en la licencia de la versión comercial, que en su momento generaron bastante controversia, pero en el fondo no son algo tan dramático si uno migra a OpenJDK, cuya publicación bajo la licencia GPLv2 minimiza las probabilidades de que Oracle imponga restricciones muy severas.
Todos los detalles sobre Java 23 pueden ser consultados a través del anuncio oficial, las notas de lanzamiento disponibles en la web de OpenJDK y en la entrada publicada en el blog oficial de Java. La versión software libre del JDK puede ser obtenida desde el sitio web de Java (alternativamente y extraoficialmente desde Adoptium) y la comercial desde la web de Oracle.
Entrada actualizada el 18 de septiembre de 2024 a las 20:40 aproximadamente.