Tras seis meses de desarrollo, Oracle ha lanzado Java SE 27 (Java Platform, Standard Edition 27), que utiliza el proyecto de código abierto OpenJDK como implementación de referencia. A excepción de la eliminación de algunas características obsoletas, Java SE 27 mantiene la compatibilidad con versiones anteriores de la plataforma Java; la mayoría de los proyectos Java escritos previamente se ejecutarán sin cambios en la nueva versión. Se han preparado compilaciones listas para instalar de Java SE 27 (JDK, JRE y Server JRE) 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 SE 27 es completamente de código abierto bajo la licencia GPLv2 con la excepción GNU ClassPath, que permite la vinculación dinámica con productos comerciales.
Java SE 27 se clasifica como una versión con soporte regular, con actualizaciones que se publicarán hasta la siguiente versión. La rama de soporte a largo plazo (LTS) debería ser Java SE 25, Java SE 21 o Java SE 17, con actualizaciones que se publicarán hasta 2033, 2031 y 2029, respectivamente (generalmente disponibles hasta septiembre de 2030, 2028 y 2026). El soporte extendido para la rama Java SE 8 LTS continuará hasta 2030, y para Java SE 11, hasta 2032.
Los cambios en Java SE 27 (1, 2, 3, 4) incluyen:
- Por defecto, todos los entornos utilizan el recolector de basura G1 (Garbage-First), utilizado anteriormente en sistemas de servidor. G1 está optimizado para su uso en sistemas multiprocesador con gran capacidad de memoria y para equilibrar una latencia predecible con un alto rendimiento. Durante su funcionamiento, G1 divide la memoria en muchas regiones pequeñas y prioriza aquellas con más objetos sin usar y datos menos utilizados.
- La JVM HotSpot utiliza encabezados de objeto compactos por defecto. En sistemas de 64 bits, el tamaño del encabezado se ha reducido de 96 a 64 bits, lo que disminuye el consumo de memoria y aumenta la probabilidad de que los datos accedan a la caché del procesador. En las pruebas de rendimiento SPECjbb2015, el consumo de memoria disminuyó un 22 %, la carga de la CPU un 8 % y el número de operaciones de recolección de basura un 15 %. Los tiempos de ejecución de las pruebas del analizador JSON se redujeron un 10 %.
- La implementación TLS 1.3 agrega soporte para esquemas de acuerdo de clave híbridos que combinan el algoritmo ML-KEM (CRYSTALS-Kyber) resistente a la computación cuántica con algoritmos clásicos de curva elíptica ECDHE: X25519MLKEM768 (ECDHE con la curva X25519 + ML-KEM-768), SecP256r1MLKEM76 (ECDHE con la curva secp256r1 + ML-KEM-768) y SecP384r1MLKEM1024 (ECDHE con la curva secp384r1 + ML-KEM-1024). En la API javax.net.ssl Estos esquemas están habilitados por defecto y no requieren ningún cambio en la aplicación para su uso.
- JDK Flight Recorder (JFR), una herramienta para la monitorización, el análisis y el diagnóstico del rendimiento, ahora permite sanitizar los argumentos de la línea de comandos, los valores iniciales de las variables de entorno y las propiedades del sistema en la información de diagnóstico guardada. Este cambio evita la filtración de datos confidenciales procesados por el proceso analizado, como tokens de autorización y claves de acceso a la API transmitidas mediante variables de entorno.
- Se ha implementado la tercera versión preliminar de la API de constantes diferidas para trabajar con objetos que contienen datos inmutables y que se tratan como constantes en la JVM. Se aplican optimizaciones de rendimiento similares a las de los campos con la palabra clave "final" a dichos objetos. A diferencia de "final", la nueva API separa la creación de valores constantes de su inicialización, garantiza que un valor solo se pueda inicializar una vez, reduce el tiempo de inicio del programa y permite que las optimizaciones de plegado de constantes, que antes solo se utilizaban en el código interno del JDK, se utilicen en el código del usuario. class Application { // Anteriormente: // static final UserService USERS = new UserService(); // Ahora: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- El motor de coincidencia de patrones introduce una quinta versión de la capacidad de usar tipos primitivos (int, byte, char y otros tipos base que no son objetos) en todo tipo de patrones, en el operador instanceof y en 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 publicado para pruebas la séptima versión preliminar de la API de concurrencia estructurada, que simplifica el desarrollo de aplicaciones multihilo al tratar múltiples tareas que se ejecutan en diferentes hilos como una sola unidad.
- Se ha implementado la duodécima versión de prueba de la API Vector. Esta API proporciona funciones para cálculos vectoriales realizados mediante instrucciones vectoriales de procesadores x86_64 y AArch64, y permite operaciones simultáneas sobre múltiples valores (SIMD). A diferencia de la autovectorización de operaciones escalares del compilador JIT HotSpot, la nueva API permite un control explícito sobre la vectorización para el procesamiento paralelo de datos.
- Ya está disponible una tercera versión de la API para codificar y decodificar objetos que contienen claves criptográficas, certificados y listas de revocación de certificados utilizando el formato PEM (Pivacy-Enhanced Mail).
Además, nos complace anunciar el lanzamiento de una actualización de la plataforma JavaFX 27 para la creación de aplicaciones con interfaz gráfica de usuario. También se espera el lanzamiento, en las próximas horas, de la máquina virtual universal GraalVM 27, que admite la ejecución de aplicaciones en JavaScript (Node.js), Python, Ruby, R, cualquier lenguaje de la JVM (Java, Scala, Clojure, Kotlin) y lenguajes para los que se puede generar bitcode de LLVM (C, C++, Rust).
Fuente: opennet.ru
