Novedades de Java 20

Escrito por el .
java planeta-codigo
Enlace permanente Comentarios

La cadencia de una nueva versión de Java cada 6 meses continúa. En Java 20 no hay novedades en el lenguaje solo nuevas vistas previas de funcionalidades que se publicarán en un futuro en su versión definitiva. En cualquier caso la versión incorpora otra serie de cambios más pequeños que mejoran la seguridad, el rendimiento del JDK y corrigen errores. La siguiente versión Java 21 será una versión LTS que la hace más destacada por su más prolongado tiempo de soporte y porque incorpora todas las novedades desde la anterior LTS para aquellos que migran de LTS a LTS.

Java

En marzo de 2023 se ha publicado la versión 20 de Java. En general las novedades no añaden nada al lenguaje simplemente incorporan nuevos JEP que definen nuevas vistas previas de anteriores funcionalidades.

Estos JEP permiten experimentar, probar y modificarlas antes de publicarse como versiones definitivas en posteriores versiones de Java. En Java 20 no se añade nada nuevo en el lenguaje pero hay varios nuevos JEPs que sí serán importantes novedades en el lenguaje.

Después de cambiar el ciclo de publicación de tres a dos años para las versiones LTS la versión del JDK 21 será una LTS. Las versiones LTS son versiones especiales por su periodo prolongado de soporte que en un ámbito empresarial es algo deseado por lo que se suele esperar a estas versiones, momento en el cual se obtienen todas las novedades de las versiones no LTS.

Introducción

Entre las novedades de Java 20 aunque son todo vistas previas cada una de estas novedades serán muy destacadas cuando se incorporen de forma definitiva. A destacar están los virtual threads, structured concurrency, scoped values que sustituirán a los ThreadLocal que se han usado hasta ahora para compartir datos entre threads. En cada una de las nuevas versiones de los JEP en el apartado de history de detallan los cambios de estas nuevas vistas previas sobre la anterior.

Más allá de los JEPs el JDK 20 incorpora otro conjunto de novedades destacadas y cambios relativos a la seguridad, marcar como deprecated varios métodos no tan destacados como los cambios en el lenguaje tienen relevancia en los casos que apliquen.

Las novedades incluidas en esta versión son:

Con cada nueva versión los medios publican artículos que detallan cada una de las novedades.

No incluyo ejemplos de código ya que todas estas novedades ya las he mencionado en versiones anteriores de novedades de Java y en los artículos de esta lista se muestran de forma detallada.

Otros cambios

Entre la lista de cambios adicionales en el JDK está el soporte para unicode 15.

Para algunos algoritmos de criptografía versiones optimizadas de las funciones para las instrucciones AVX512, AVX, AVX2, funciones intrinsic optimizadas por un humano en vez del compilador que permite mejorar el rendimiento es secciones críticas del código.

Se ha cambiado el comportamiento de los métodos Thread.suspend(), Thread.resume(), Thread.stop() que ahora lanzan una excepción. Estos métodos han sido problemáticos en su uso en ambientes concurrentes y se está haciendo un esfuerzo por eliminarlos para evitar sus problemas.

Se elimina el soporte para generar bytecode -source/-target/–release, con la política definida en JEP 182 se soporta únicamente 1+3 anteriores versiones. Por ejemplo, en Java 9 se soportan las versiones 9, 8, 7, 6.

Se actualiza la base de datos de zonas horarias a 2022c, afecta en casos en los que se usen zonas horarias de antes de 1970. Las zonas horarias cambian más a menudo de que en un principio se puede pensar y la base de datos de zonas horarias se ha de actualizar de forma periódica, actualizar la base de datos de zonas horarias requiere actualizar el JDK o cambios adicionales y por ello es un motivo de preferir usar una librería.

Novedades futuras

Como ocurre con las versiones en vista previa tardan en publicarse como versión definitiva. Entre los cambios futuros posibles y que se incorporen en el lenguaje están los siguientes.

Los universal generics permitirán crear colecciones de tipos primitivos. Esto permitirá simplificar los algoritmos que manejan genéricos y reducir el número de métodos a crear para soportar los tipos primitivos.

Los sequenced collections tiene el objetivo de proporcionar unos métodos unificados de manejo de colecciones más universal, ahora varias clases de colecciones tiene métodos diferentes para operaciones similares lo que ocasiona cierta inconsistencia.

Los string templates permite realizar interpolación de cadenas en el lenguaje.


Comparte el artículo: