Lanzamiento de Java SE 23 y OpenJDK 23

Después de seis meses de desarrollo, Oracle ha publicado la plataforma Java SE 23 (Java Platform, Standard Edition 23), cuya implementación de referencia utiliza el proyecto abierto OpenJDK. A excepción de la eliminación de algunas funcionalidades obsoletas, Java SE 23 mantiene la compatibilidad hacia atrás con versiones anteriores de la plataforma Java: la mayoría de los proyectos Java previamente escritos funcionarán sin cambios al ejecutarse en la nueva versión. Las versiones listas para instalar de Java SE 22 (JDK, JRE y Server JRE) están preparadas para Linux (x86_64, AArch64), Windows (x86_64) y macOS (x86_64, AArch64). La implementación de referencia de Java 23, desarrollada en el marco del proyecto OpenJDK, está completamente abierta bajo la licencia GPLv2 con excepciones de GNU ClassPath, que permiten el enlace dinámico con productos comerciales.

Java SE 23 se clasifica como una versión con soporte estándar, con actualizaciones que se lanzarán hasta el próximo lanzamiento. Para obtener soporte a largo plazo (LTS), se deben utilizar Java SE 21 o Java SE 17, cuyas actualizaciones se lanzarán hasta 2031 y 2029 respectivamente (públicas hasta 2028 y 2026). El soporte extendido para la rama LTS de Java SE 8 se prolongará hasta 2030, y para Java SE 11 hasta 2032.

Entre las novedades que se proponen en Java SE 23:

  • Se ha incluido por defecto el modo generativo del recolector de basura ZGC (Generational Z Garbage Collector), que utiliza un procesamiento separado de objetos "viejos" y "nuevos", aumentando la eficiencia de la limpieza de objetos recién creados con un tiempo de vida corto. La aplicación de Generational ZGC reduce los riesgos de interrupciones durante la asignación de recursos, disminuye la carga de la CPU y el consumo de memoria durante la recolección de basura. Las pruebas de Generational ZGC con Apache Cassandra 4 mostraron un aumento de la capacidad de procesamiento de 4 veces con un tamaño de heap fijo y una reducción del tamaño del heap en una cuarta parte con una capacidad de procesamiento inalterada.
  • Se ha añadido soporte para el uso de Markdown en JavaDoc para documentar el código en comentarios, que se puede utilizar en lugar de una mezcla de HTML y etiquetas @ de JavaDoc.
    Lanzamiento de Java SE 23 y OpenJDK 23
  • Los mecanismos de coincidencia de patrones se han ampliado con el soporte preliminar para el uso de tipos primitivos (int, byte, char y otros tipos básicos que no son objetos) en todos los tipos de plantillas, en el operador "instanceof" y en los bloques "switch". switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { … b … }
  • Se ha añadido el soporte preliminar para usar la expresión "import module M" para importar todos los paquetes exportados por el módulo especificado de una sola vez. Este cambio simplifica enormemente la reutilización de bibliotecas modulares, permitiendo conectar bibliotecas y clases sin tener que definir su ubicación en la jerarquía de paquetes. Por ejemplo, especificar "import module java.base" importará todos los 54 paquetes que forman parte del módulo java.base, que anteriormente tendrían que mencionarse por separado ("import java.io.*", "import java.util.*", etc.).

    Se ha propuesto una segunda implementación preliminar de la API Class-File para el análisis, la generación y la transformación de archivos de clase Java. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue().startsWith("debug"))) { classBuilder.with(ce); } } });

  • Se ha propuesto una octava implementación preliminar de la API Vector, que proporciona funciones para cálculos vectoriales que se realizan utilizando instrucciones vectoriales de procesadores x86_64 y AArch64, permitiendo aplicar operaciones simultáneamente a múltiples valores (SIMD). A diferencia de las capacidades de autovectorización de operaciones escalares proporcionadas por el compilador JIT de HotSpot, la nueva API permite gestionar explícitamente la vectorización para el procesamiento paralelo de datos.
  • En la clase java.io.Console se han añadido los métodos format, printf, readPassword y readLine para formatear, mostrar y leer texto teniendo en cuenta la configuración regional seleccionada. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", new Date()) 2024-mai-16 jeudi
  • Se ha añadido una segunda implementación preliminar de la API Stream extendida, que soporta la definición de operaciones intermedias personalizadas que pueden ser útiles en casos donde las operaciones intermedias integradas existentes no son suficientes para la transformación de datos deseada. Los manejadores personalizados se conectan a través de una nueva operación intermedia Stream::gather(Gatherer), que procesa los elementos de la corriente aplicando a ellos el manejador especificado por el usuario. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 == > [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Se ha añadido una tercera implementación preliminar de clases implícitamente declaradas y de instancias anónimas del método «main», en las que se puede prescindir de las declaraciones public/static, de la transmisión de arreglos de argumentos y de otras entidades relacionadas con la declaración de clases. // Antes public class HelloWorld { public static void main(String[] args) { System.out.println(«¡Hola mundo!»); } } // Ahora se puede void main() { System.out.println(«¡Hola, Mundo!»); }
  • Se ha añadido una segunda opción preliminar que permite especificar en los constructores expresiones antes de la llamada a super(…), utilizada para llamar explícitamente al constructor de la clase padre desde el constructor de la clase heredada, siempre que estas expresiones no hagan referencia a la instancia creada por el constructor. class Outer { void hello() { System.out.println(«Hola»); } class Inner { Inner() { hello(); super(); } } }
  • Se ha añadido una tercera implementación preliminar de valores limitados (Scoped Values), que permiten compartir datos inmutables en flujos y intercambiar datos de manera efectiva entre subflujos (los valores son heredados). Los Scoped Values se desarrollan para reemplazar el mecanismo de variables locales al hilo (thread-local variables) y son más eficientes al usar un número muy grande de flujos virtuales (miles o millones de flujos). La principal diferencia entre los Scoped Values y las variables locales al hilo es que los primeros se escriben una vez, no pueden ser modificados posteriormente y solo están disponibles durante la ejecución del hilo.
  • Se ha propuesto una tercera versión preliminar del API para la concurrencia estructurada (Structured Concurrency), que simplifica el desarrollo de aplicaciones multihilo al manejar múltiples tareas que se ejecutan en diferentes hilos como un único bloque.
  • Se han declarado obsoletos y se consideran para eliminación los métodos de acceso a la memoria externa (fuera de la JVM) proporcionados por la clase sun.misc.Unsafe. Para acceder a la memoria fuera del montón (off-heap) e interactuar con código externo, se recomienda utilizar el API VarHandle y el API FFM (Foreign Function & Memory).

Además, se puede destacar la publicación de la actualización de la plataforma para la creación de aplicaciones con interfaz gráfica JavaFX 23 e inclusión en la versión principal del compilador JIT GraalVM en Oracle JDK 23.

También se ha presentado una nueva versión de la máquina virtual universal GraalVM, que soporta la ejecución de aplicaciones en JavaScript (Node.js), Python, Ruby, R, cualquier lenguaje para JVM (Java, Scala, Clojure, Kotlin) y lenguajes para los cuales se puede generar código de bytes LLVM (C, C++, Rust). Además del soporte para JDK 23, en la nueva versión se ha realizado una optimización del consumo de memoria y del tamaño del código ejecutable, implementando un soporte completo para herramientas de integración de Python y WebAssembly en código Java usando compilación JIT.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster