Lanzamiento de Java SE 27 y OpenJDK 27

Después de seis meses de desarrollo, Oracle publicó la plataforma Java SE 27 (Java Platform, Standard Edition 27), cuya implementación de referencia utiliza el proyecto abierto OpenJDK. A excepción de la eliminación de algunas funciones obsoletas, Java SE 27 mantiene la compatibilidad hacia atrás con las versiones anteriores de la plataforma Java; la mayoría de los proyectos de Java previamente escritos funcionarán sin cambios en la nueva versión. Las distribuciones listas para instalar de Java SE 27 (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 SE 27 desarrollada en el marco del proyecto OpenJDK es completamente abierta bajo la licencia GPLv2 con excepciones de GNU ClassPath, que permiten el enlace dinámico con productos comerciales.

Java SE 27 se clasifica como una versión con un ciclo de soporte estándar, y se lanzarán actualizaciones hasta el próximo lanzamiento. Como rama de soporte a largo plazo (LTS), se deben utilizar Java SE 25, Java SE 21 o Java SE 17, cuyas actualizaciones se lanzarán hasta 2033, 2031 y 2029 respectivamente (las de acceso público hasta septiembre de 2030, 2028 y 2026). El soporte extendido de la rama LTS de Java SE 8 se prolongará hasta 2030, mientras que Java SE 11 lo hará hasta 2032.

Entre los cambios en Java SE 27 (1, 2, 3, 4):

  • Por defecto, se utiliza el recolector de basura G1 (Garbage-First) para todos los entornos, que anteriormente se aplicaba a sistemas de servidores. G1 está optimizado para su uso en sistemas multiprocesador con gran cantidad de memoria y equilibra la predictibilidad de latencias con alta capacidad de procesamiento. Durante su funcionamiento, G1 divide la memoria en muchas regiones pequeñas y limpia primero aquellas regiones donde hay más objetos no utilizados y menos datos activamente utilizados.
  • En la JVM HotSpot, se utilizan por defecto encabezados compactos de objetos. El tamaño de los encabezados en sistemas de 64 bits se ha reducido de 96 a 64 bits, lo que ha disminuido el consumo de memoria y ha aumentado la probabilidad de que los datos se almacenen en la caché del procesador. En las pruebas SPECjbb2015, el consumo de memoria se redujo en un 22%, la carga en el CPU disminuyó en un 8%, y el número de operaciones de recolección de basura se redujo en un 15%. Al probar el analizador JSON, el tiempo de ejecución de las pruebas se redujo en un 10%.
  • La implementación de TLS 1.3 ahora incluye soporte para esquemas de negociación de claves híbridos, combinando el algoritmo ML-KEM (CRYSTALS-Kyber), resistente a ataques de computadoras cuánticas, con algoritmos clásicos basados en curvas elípticas ECDHE: X25519MLKEM768 (ECDHE con curva X25519 + ML-KEM-768), SecP256r1MLKEM76 (ECDHE con curva secp256r1 + ML-KEM-768) y SecP384r1MLKEM1024 (ECDHE con curva secp384r1 + ML-KEM-1024). En la API javax.net.ssl Estos esquemas están habilitados por defecto y no requieren modificaciones en las aplicaciones para ser utilizados.
  • Se ha añadido soporte para limpiar la información diagnóstica guardada en el JDK Flight Recorder (JFR), utilizado para el monitoreo, perfilado y diagnóstico de rendimiento, eliminando los argumentos de línea de comandos, las variables de entorno iniciales y las propiedades del sistema. Este cambio evita la filtración de datos confidenciales procesados por el proceso perfilado, como los tokens de autorización y las claves de acceso a la API transmitidos a través de variables de entorno.
  • Se ha implementado una tercera versión preliminar de la API Lazy Constants para trabajar con objetos que contienen datos inmutables y son tratados en la JVM como constantes. A estos objetos se les aplican optimizaciones de rendimiento similares a las de los campos con la palabra clave «final». A diferencia de «final», la nueva API separa la creación de valores constantes y su inicialización, garantizando que el valor solo puede ser inicializado una vez, reduciendo el tiempo de arranque de las aplicaciones y permitiendo que las optimizaciones de plegado de constantes se apliquen en el código del usuario, las cuales anteriormente solo se utilizaban en el código interno del JDK. class Application { // Antes: // static final UserService USERS = new UserService(); // Ahora se puede: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
  • En el mecanismo de coincidencia de patrones se ha propuesto una quinta versión preliminar para permitir el uso de tipos primitivos (int, byte, char y otros tipos básicos no objeto) en todos los tipos 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 -> «estado desconocido: » + i; } if (i instanceof byte b) { … b … }
  • Se ha propuesto la séptima versión preliminar del API para la concurrencia estructurada, que simplifica el desarrollo de aplicaciones multihilo al manejar varias tareas ejecutadas en diferentes hilos como un solo bloque.
  • Se ha implementado la duodécima versión de prueba del API Vector, que proporciona funciones para cálculos vectoriales, que se ejecutan utilizando instrucciones vectoriales de los procesadores x86_64 y AArch64, permitiendo aplicar operaciones simultáneamente a varios valores (SIMD). A diferencia de las capacidades de autovectorización de operaciones escalares proporcionadas por el compilador JIT HotSpot, el nuevo API permite gestionar explícitamente la vectorización para el procesamiento paralelo de datos.
  • Está disponible la tercera versión preliminar del API para la codificación y decodificación de objetos con claves criptográficas, certificados y listas de revocación de certificados, utilizando el formato PEM (Privacy-Enhanced Mail).

Además, se ha publicado una actualización de la plataforma para la creación de aplicaciones con interfaz gráfica JavaFX 27. En las próximas horas, también se espera el lanzamiento de la máquina virtual universal GraalVM 27, que soporta la ejecución de aplicaciones en JavaScript (Node.js), Python, Ruby, R, así como en cualquier lenguaje para JVM (Java, Scala, Clojure, Kotlin) y lenguajes que pueden generar código de bytes LLVM (C, C++, Rust).

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