después de entregar muchos detalles febrero pasado, Oráculo entregó Java 20 en versión de producción. Esta actualización del kit de desarrollo (JDK) incluye varias innovaciones aún en prueba, como subprocesos virtuales y concurrencia estructurada. Un total de siete características están en incubación, que van desde API vectoriales, valores delimitados, patrones para registros, declaraciones y expresiones de cambio de declaraciones, así como una función externa y una API de memoria. Lanzado con soporte a corto plazo durante 6 meses, JDK 20 sigue la versión de JDK 19 implementada el 20 de septiembre. JDK 21, programado para septiembre, será una versión con soporte a largo plazo (LTS). Java 20 se puede descargar desde el sitio web de Oracle.

Índice
  1. Vector API e hilos virtuales con cita previa
  2. Patrones de registro y simultaneidad estructurados también disponibles
  3. Función externa mejorada y API de memoria.

Vector API e hilos virtuales con cita previa

Al final, estas son las características que no debe perderse en Java 20. En primer lugar, las API vectoriales se agregaron oficialmente hace unas semanas. Expresan cálculos que se compilan de manera confiable en tiempo de ejecución como instrucciones similares en arquitecturas de CPU. Por tanto, el rendimiento sería mayor que el de los cálculos escalares equivalentes. El Vector API se incubó en JDK 16, JDK 17, JDK 18 y JDK 19.

Otro elemento, los hilos virtuales que se benefician de una segunda vista previa. Se trata de subprocesos ligeros que reducen el esfuerzo de escribir, mantener y observar aplicaciones simultáneas. Según Oracle, esta capacidad cambiará fundamentalmente la forma en que se escalan las aplicaciones Java. Los cambios menores realizados desde la primera vista previa en JDK 19 incluyen una pequeña cantidad de cambios de API (que se hicieron permanentes en JDK 19) y degradaciones de ThreadGroup (que también se hicieron permanentes en JDK 19).

Patrones de registro y simultaneidad estructurados también disponibles

Por su parte,concurrencia estructurada se materializa como una API que simplifica la programación multiproceso y trata múltiples tareas ejecutadas en diferentes subprocesos como una sola unidad de trabajo. El manejo de errores y la reversión se simplifican, lo que mejora la confiabilidad y la observabilidad. El único cambio desde la incubación en JDK 19 es que StructuredTaskScope se ha actualizado para admitir valores de referencia de subprocesos más antiguos. Como recordatorio, los valores de alcance, una API en la fase de incubación, permiten compartir datos inmutables dentro y entre subprocesos. Son preferibles a las variables locales, especialmente cuando se utilizan una gran cantidad de subprocesos virtuales. Los valores con alcance pueden compartir datos de forma segura y eficiente entre componentes de un programa grande sin la necesidad de argumentos de método.

Disponibles en una segunda vista previa, los patrones de registro mejoran el lenguaje de programación Java con patrones para deconstruir los valores de registro de Record Values. Los patrones de registro y los patrones de tipo se pueden anidar para permitir una forma potente, declarativa y componible de navegación y procesamiento de datos. Los objetivos son ampliar la coincidencia de patrones para expresar consultas de datos más sofisticadas y componibles, sin cambiar la sintaxis o la semántica de los patrones de tipos. Entre los principales cambios realizados desde la primera vista previa incluida con JDK 19, podemos citar la compatibilidad con la inferencia de tipos parametrizados para patrones genéricos de registros, la compatibilidad con patrones de registros en bucles for (mejorada para declaraciones) y la compatibilidad eliminada con patrones de registros con nombre.

Función externa mejorada y API de memoria.

Finalmente, las funciones externas y las API de memoria permiten que los programas Java interactúen con código y datos fuera del tiempo de ejecución de Java, incluidas las aplicaciones Java para llamar a bibliotecas nativas y procesar datos nativos sin la fragilidad y los riesgos de JNI (interfaz nativa de Java). La API se incubó previamente en las versiones 17 y 18 de JDK y se obtuvo una vista previa en JDK 19. Las mejoras desde JDK 19 incluyen la unificación de las abstracciones MemorySegment y MemoryAddress, una jerarquía MemoryLayout mejorada y la división de MemorySession en Arena y SegmentScope para promover el intercambio de segmentos más allá de los límites de mantenimiento.

Según Oracle, las características de JDK 20 están en camino de ser estandarizadas. Estas características provienen de proyectos de investigación de Java, incluido Amber, para características centradas en la productividad (plantillas de registro y coincidencia de patrones para conmutadores); Panamá, para interconectar la JVM con código nativo (API de función y memoria externa y API vectorial); y Loom, que incuba nuevas características de la JVM y las API creadas sobre ellas (valores enmarcados, subprocesos virtuales y concurrencia estructurada).

Las capacidades que no llegaron a JDK 20 pero que aún están bajo consideración para Java incluyen genéricos universales, plantillas de cadenas, colecciones secuenciadas y una API de VM de seguimiento de pila asíncrona.