Java Development Kit 22, que se lanzará en marzo de 2024 como la próxima versión de Java Standard Edition, incluirá 12 funciones, siendo las últimas incorporaciones una segunda vista previa de los valores de alcance y una vista previa de los recolectores de flujo.
JDK 22 alcanzó la primera fase de reducción, con el conjunto de funciones congelado, el 7 de diciembre de 2023, y entró en la fase dos de reducción el 18 de enero de 2024. La disponibilidad general está programada para el 19 de marzo, con dos candidatos de lanzamiento planificados para febrero. Los errores se examinarán desde ahora hasta el lanzamiento general.
Valores de alcance Permitir el intercambio seguro y eficiente de datos inmutables dentro y entre subprocesos. Se prefieren a las variables locales de subprocesos, especialmente cuando se utilizan una gran cantidad de variables de subprocesos. Los objetivos incluyen facilidad de uso, comprensibilidad, solidez y rendimiento.
recolectores de corrientes mejorará la API de transmisión para admitir operaciones intermedias personalizadas. Esto permitirá que las canalizaciones de flujo transformen los datos de maneras que no se pueden lograr fácilmente con las operaciones intermedias integradas existentes.
Estas últimas características se unen a una segunda vista previa de la concurrencia estructurada, una vista previa de las declaraciones anteriores super(…)
, una vista previa de una API de archivo de clase, fijación de regiones para el recolector de basura G1, una segunda vista previa de plantillas de cadenas, variables y patrones sin nombre, una función externa y una API de memoria, y una séptima incubadora de una API vectorial. También se ha propuesto una segunda vista previa de las clases y métodos principales de instancia declarados implícitamente, y una mejora en el iniciador de Java que le permitiría ejecutar programas de múltiples archivos.
Las versiones de acceso anticipado de JDK 22 están disponibles en jdk.java.net para Linux, Windows y Mac.
Con concurrencia estructurada, la programación concurrente se simplifica a través de una API que trata grupos de tareas relacionadas que se ejecutan en diferentes subprocesos como una sola unidad de trabajo, lo que agiliza el manejo y la cancelación de errores, mejora la confiabilidad y mejora la observabilidad. Esta API fue vista previa en JDK 21 e incubado en JDK 19 y JDK 20.
La mejora del iniciador de aplicaciones Java le permitirá ejecutar un programa suministrado como múltiples archivos de código fuente Java. El objetivo detrás de la capacidad de iniciar programas de código fuente de múltiples archivos es hacer que la transición de programas pequeños a programas más grandes sea más gradual, permitiendo a los desarrolladores elegir si tomarse la molestia de configurar una herramienta de compilación y cuándo hacerlo.
El API de archivo de clase proporcionará una API estándar para analizar, generar y transformar archivos de clase Java. Su objetivo es permitir que los componentes del JDK migren a la API estándar y, eventualmente, eliminar la copia interna del JDK del tercero. MAPE biblioteca. El análisis, la generación y la transformación de archivos de clase son omnipresentes y lo utilizan herramientas y bibliotecas independientes para examinar y ampliar programas sin poner en peligro la mantenibilidad del código fuente.
Sin embargo, el formato de archivos de clase Java evoluciona más rápidamente ahora que antes, debido a la cadencia de lanzamiento estándar de Java de seis meses. Esta velocidad de evolución ha dado como resultado que los marcos encuentren con mayor frecuencia archivos de clase que son más nuevos que la biblioteca de archivos de clase. Esto ha dado lugar a errores y a que los desarrolladores de marcos intenten escribir código para analizar archivos de clase del futuro con la esperanza de que no cambie nada demasiado grave. El plan es que la plataforma Java defina e implemente una API de archivo de clase estándar para evolucionar junto con el formato de archivo de clase.
Fijación de región para G1 tiene como objetivo reducir la latencia, de modo que no sea necesario deshabilitar la recolección de basura (GC) durante las regiones críticas de la interfaz nativa de Java (JNI). Los objetivos incluyen que no se detengan los subprocesos debido a regiones JNI críticas, que no se agregue latencia para iniciar la recolección de basura debido a estas regiones, que no haya regresiones en los tiempos de pausa de GC cuando ninguna de estas regiones está activa y regresiones mínimas en los tiempos de pausa de GC cuando estas regiones están activas. . Actualmente, el GC predeterminado, G1, desactiva la recolección de basura en cada región crítica, lo que puede tener un impacto significativo en la latencia. Con este cambio, los subprocesos de Java nunca esperarán a que se complete una operación de GC G1.
Clases y métodos de instancia declarados implícitamente Actualmente se está viendo una vista previa en JDK 21 como clases sin nombre y métodos de instancia. Esta característica obtendría el título revisado y cambios significativos en JDK 22 en una segunda vista previa. La capacidad tiene como objetivo hacer evolucionar el lenguaje Java para que los estudiantes puedan escribir sus primeros programas sin necesidad de comprender las características del lenguaje diseñadas para programas grandes. Los estudiantes podrían escribir declaraciones simplificadas para programas de una sola clase y luego expandir los programas sin problemas para utilizar funciones más avanzadas a medida que sus habilidades crezcan. La segunda vista previa realiza cambios en la declaración de clases y la invocación de métodos que simplifican la propuesta original.
La vista previa de declaraciones antes super(…)
pertenece a los constructores en el lenguaje, lo que permite que las declaraciones que no hacen referencia a la instancia que se está creando aparezcan antes de un constructor explícito. Un objetivo del plan incluye brindar a los desarrolladores mayor libertad para expresar el comportamiento de los constructores, permitiendo una ubicación más natural de la lógica que actualmente debe incluirse en métodos estáticos auxiliares, constructores intermedios auxiliares o argumentos de constructores.
Otro objetivo es preservar la garantía existente de que los constructores se ejecutan en orden de arriba hacia abajo durante la creación de instancias de clases, asegurando que el código en un constructor de subclase no pueda interferir con la creación de instancias de superclases. Un tercer objetivo declarado es no requerir ningún cambio en la JVM. Esta es la única característica de JDK 22, hasta el momento, que aún no ha sido vista previa o incubada previamente en Java estándar.
Plantillas de cadenas complementará los literales de cadena y los bloques de texto existentes de Java acoplando texto literal con expresiones integradas y procesadores de plantillas para producir resultados especializados. Los objetivos incluyen:
- Simplificar la escritura de programas Java al facilitar la expresión de cadenas que incluyen valores calculados en tiempo de ejecución.
- Mejorar la legibilidad de expresiones que mezclan texto y expresiones, ya sea que el texto quepa en una sola línea de origen o abarque varias líneas de origen.
- Mejorar la seguridad de los programas que componen cadenas a partir de valores proporcionados por el usuario y las pasan a otros sistemas al admitir la validación y transformación tanto de la plantilla como de los valores de sus expresiones integradas.
- Mantener la flexibilidad al permitir que las bibliotecas Java definan la sintaxis de formato utilizada en las plantillas de cadenas.
- Simplificar el uso de API que aceptan cadenas escritas en lenguajes distintos de Java, como XML y JSON.
- Permitir la creación de valores que no son cadenas calculados a partir de texto literal y expresiones incrustadas sin necesidad de transitar a través de una representación de cadena intermedia.
Las plantillas de cadenas aparecen en una primera vista previa en JDK 21. La segunda vista previa tiene como objetivo obtener experiencia y comentarios adicionales. Excepto por un cambio técnico en los tipos de expresiones de plantilla, no hay cambios con respecto a la primera vista previa.
Una API vectorial (séptima incubadora) expresaría cálculos vectoriales que se compilan de manera confiable en tiempo de ejecución con instrucciones vectoriales óptimas en arquitecturas de CPU compatibles, logrando un rendimiento superior a los cálculos escalares equivalentes. La API proporciona una forma de escribir algoritmos vectoriales complejos en Java, utilizando el algoritmo de vectorización automática HotSpot existente pero con un modelo de usuario que hace que la vectorización sea más predecible y robusta.
Esta capacidad se ha incubado en versiones anteriores de Java que se remontan a JDK 16 en marzo de 2021. Los objetivos de la API incluyen que sea clara y concisa, independiente de la plataforma y que ofrezca compilación y rendimiento en tiempo de ejecución confiables en arquitecturas x64 AArch64, así como una degradación elegante. Esta capacidad tiene como objetivo aprovechar Proyecto Valhalla mejoras en el modelo de objetos de Java, lo que permite que los programas trabajen con objetos de valor.
Variables y patrones sin nombre se puede utilizar cuando se requieren declaraciones de variables o patrones anidados pero nunca se utilizan. Los objetivos del plan incluyen:
- Captar la intención del desarrollador de que un determinado parámetro lambda o enlace no se utilice y aplicar esa propiedad para aclarar los programas y reducir las oportunidades de error.
- Mejorar la mantenibilidad del código mediante la identificación de variables que deben declararse pero que no se utilizan
- Permitir que aparezcan múltiples patrones en una sola etiqueta de caso, siempre que ninguno de ellos declare variables de patrón
- Mejorar la legibilidad de los patrones de registros eliminando patrones de tipos anidados innecesarios
Esta propuesta fue anticipada en JDK 21 y se finalizará sin cambios en JDK 22.
La función externa y la API de memoria. permite que los programas Java interoperen con código y datos fuera del tiempo de ejecución de Java. Al invocar funciones externas y acceder de forma segura a la memoria externa, los programas Java pueden llamar a bibliotecas nativas y procesar datos nativos sin la fragilidad de JNI (Java Native Interface), afirma la propuesta.
La función externa y la API de memoria se obtuvieron previamente en una vista previa en JDK 19, JDK 20y JDK 21. Estaría finalizado en JDK 22. Las últimas revisiones cubren tres áreas: soporte de conjuntos de caracteres arbitrarios para cadenas nativas, permitir a los clientes crear descriptores de funciones en lenguaje C mediante programación e introducir el atributo de manifiesto de archivo JAR Enable-Native-Access. Este último permite que los archivos JAR ejecutables llamen a métodos restringidos sin tener que utilizar la opción de línea de comandos —enable-native-access.
Java 22 es una versión de funciones que recibirá seis meses de soporte de Oracle, a diferencia del lanzamiento reciente. JDK 21, que es una versión de soporte a largo plazo (LTS) que recibirá al menos ocho años de soporte. Además de Oracle, las empresas podrían ofrecer soporte más prolongado para JDK 22 si así lo desean. Las actualizaciones estándar de Java se realizan cada seis meses y las versiones LTS llegan cada dos años.
Copyright © 2024 IDG Communications, Inc.