Lanzamiento de Java SE 20

Después de seis meses de desarrollo, Oracle lanzó Java SE 20 (Java Platform, Standard Edition 20), que utiliza el proyecto de código abierto OpenJDK como implementación de referencia. Con la excepción de la eliminación de algunas características obsoletas, Java SE 20 mantiene la compatibilidad con versiones anteriores de la plataforma Java; la mayoría de los proyectos Java escritos anteriormente funcionarán sin cambios cuando se ejecuten con la nueva versión. Las compilaciones listas para instalar de Java SE 20 (JDK, JRE y Server JRE) están preparadas para Linux (x86_64, AArch64), Windows (x86_64) y macOS (x86_64, AArch64). Desarrollada por el proyecto OpenJDK, la implementación de referencia de Java 20 es completamente de código abierto bajo la licencia GPLv2, con excepciones GNU ClassPath que permiten enlaces dinámicos con productos comerciales.

Java SE 20 está clasificada como una versión de soporte general y seguirá recibiendo actualizaciones hasta la próxima versión. La rama de soporte a largo plazo (LTS) debería ser Java SE 17, que seguirá recibiendo actualizaciones hasta 2029. Le recordamos que a partir del lanzamiento de Java 10, el proyecto pasó a un nuevo proceso de desarrollo, lo que implica un ciclo más corto para la formación de nuevas versiones. Ahora se desarrolla nueva funcionalidad en una rama maestra constantemente actualizada, que incluye cambios ya hechos y desde la cual las ramas se ramifican cada seis meses para estabilizar las nuevas versiones.

Las nuevas características de Java 20 incluyen:

  • Existe soporte preliminar para valores con alcance, lo que permite compartir datos inmutables entre subprocesos y datos intercambiados de manera eficiente entre subprocesos secundarios (los valores se heredan). Los valores de alcance se están desarrollando para reemplazar el mecanismo de variables locales de subprocesos y son más eficientes cuando se utilizan una gran cantidad de subprocesos virtuales (miles o millones de subprocesos). La principal diferencia entre los valores de alcance y las variables locales del subproceso es que las primeras se escriben una vez, no se pueden cambiar en el futuro y permanecen disponibles solo mientras dure la ejecución del subproceso. servidor de clase { ScopedValue estático final CURRENT_USER = nuevo ScopedValue(); servicio vacío (solicitud de solicitud, respuesta de respuesta) { var nivel = (solicitud. isAuthorized()? ADMIN: INVITADO); var usuario = nuevo usuario (nivel); ScopedValue.where(CURRENT_USER, usuario).run(() -> Application.handle(solicitud, respuesta)); } } clase DatabaseManager { DBConnection open() { var usuario = Server.CURRENT_USER.get(); if (!user.canOpen()) lanza una nueva InvalidUserException(); devolver nueva DBConnection(...); } }
  • Se agregó una segunda vista previa de patrones de registros, ampliando la función de coincidencia de patrones introducida en Java 16 para analizar los valores de las clases de registros. Por ejemplo: registrar Punto(int x, int y) {} static void printSum(Objeto obj) { if (obj instancia de Punto p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • Se agregó una cuarta implementación preliminar de coincidencia de patrones en declaraciones de "cambio", lo que permite que las etiquetas de "caso" usen no valores exactos, sino patrones flexibles que cubren una serie de valores a la vez, para lo cual antes era necesario usar engorrosos cadenas de expresiones "si... si no". static String formatterPatternSwitch(Object obj) { return switch (obj) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); caso Doble d -> String.format("doble %f", d); caso Cadena s -> String.format("Cadena %s", s); predeterminado -> o.toString(); }; }
  • Se ha agregado una segunda implementación preliminar de la API FFM (Foreign Function & Memory), que le permite organizar la interacción de programas Java con código y datos externos llamando a funciones desde bibliotecas externas y accediendo a la memoria fuera de la JVM.
  • Se agregó una segunda vista previa de subprocesos virtuales, que son subprocesos livianos que simplifican enormemente la escritura y el mantenimiento de aplicaciones multiproceso de alto rendimiento.
  • Se agregó una segunda API experimental para paralelismo estructurado, que simplifica el desarrollo de aplicaciones multiproceso al tratar múltiples tareas que se ejecutan en diferentes subprocesos como un solo bloque.
  • Se agregó una quinta vista previa de Vector API, que proporciona funciones para cálculos vectoriales que se realizan utilizando instrucciones vectoriales en procesadores x86_64 y AArch64 y permiten aplicar operaciones simultáneamente a múltiples valores (SIMD). A diferencia de las capacidades proporcionadas en el compilador HotSpot JIT para la vectorización automática de operaciones escalares, la nueva API permite controlar explícitamente la vectorización para el procesamiento de datos paralelo.

Fuente: opennet.ru

Añadir un comentario