- Oracle anunció oficialmente el lanzamiento de Java 24 (JDK 24)
- JDK 24 es la implementación de referencia de la versión 24 de Java SE Platform especificada en JSR 399 del JCP, y fue lanzado mediante el proceso de lanzamiento del JDK (JEP 3)
[Resumen por JEP]
-
JEP 404: Generational Shenandoah (experimental)
- Agrega soporte de recolección generacional en Shenandoah GC para mejorar el rendimiento
-
JEP 450: Compact Object Headers (experimental)
- Reduce el tamaño de los encabezados de objeto en HotSpot JVM de 96~128 bits a 64 bits
- Se esperan beneficios como reducción del tamaño del heap, mayor densidad de despliegue y mejor localidad de datos
-
JEP 472: Prepare to Restrict the Use of JNI
- Agrega advertencias al usar JNI (Java Native Interface)
- Proporciona advertencias consistentes en la API de funciones y memoria externas (FFM)
- Emite advertencias para preparar futuras restricciones en el uso de JNI y la API FFM
- La interfaz puede habilitarse opcionalmente en la aplicación si es necesario
-
JEP 475: Late Barrier Expansion for G1
- Simplifica la implementación de barreras en el recolector de basura G1
- Ajusta el momento de expansión de barreras desde las primeras etapas hacia etapas posteriores en el compilador JIT C2
-
JEP 478: Key Derivation Function API (preview)
- Introduce la API de Key Derivation Function (KDF) para funciones de derivación de claves criptográficas
- Permite derivar claves adicionales a partir de claves secretas y otros datos
-
JEP 483: Ahead-of-Time Class Loading & Linking
- Hace que las clases de la aplicación estén disponibles de inmediato al iniciar HotSpot JVM
- Guarda en caché el estado cargado y enlazado tras una ejecución para permitir arranques más rápidos posteriormente
-
JEP 484: Class-File API
- Proporciona una API estándar para el parseo, la generación y la transformación de archivos de clase de Java
-
JEP 485: Stream Gatherers
- Agrega soporte para operaciones intermedias personalizadas en la Stream API
- Permite transformaciones de datos difíciles de lograr con las operaciones intermedias existentes
-
JEP 486: Permanently Disable the Security Manager
- El Security Manager ya no era el principal mecanismo de seguridad para código del lado del cliente
- Fue deshabilitado tras quedar marcado para eliminación en Java 17 (JEP 411)
- La API de Security Manager se eliminará por completo en versiones futuras
-
JEP 487: Scoped Values (cuarta preview)
- Introduce Scoped Values para compartir datos inmutables con hilos hijo dentro de un hilo
- Puede reducir el costo de memoria y tiempo frente a variables locales de hilo
- Se esperan mejoras de rendimiento al usarse con hilos virtuales y concurrencia estructurada
-
JEP 488: Primitive Types in Patterns, instanceof, and switch (segunda preview)
- Agrega soporte para tipos primitivos en pattern matching
- Permite usar todos los tipos primitivos en
instanceof y switch
-
JEP 489: Vector API (noveno incubador)
- Introduce una API para operaciones vectoriales
- Se compila en instrucciones vectoriales, con expectativa de mejor rendimiento que las operaciones escalares
-
JEP 490: ZGC: Remove the Non-Generational Mode
- Elimina el modo no generacional de ZGC y establece el modo generacional como predeterminado
-
JEP 491: Synchronize Virtual Threads without Pinning
- Mejora
synchronized para que los hilos virtuales liberen los hilos de plataforma
- Evita que los hilos virtuales queden fijados a hilos de plataforma, mejorando rendimiento y escalabilidad
-
JEP 492: Flexible Constructor Bodies (tercera preview)
- Permite sentencias antes de una llamada explícita al constructor (
super(..), this(..))
- Permite inicializar campos antes de que la instancia esté completamente inicializada
-
JEP 494: Module Import Declarations (segunda preview)
- Agrega declaraciones para importar fácilmente paquetes exportados por un módulo
- Simplifica la reutilización de bibliotecas modularizadas
-
JEP 495: Simple Source Files and Instance Main Methods (cuarta preview)
- Agrega archivos fuente y métodos simples que incluso principiantes pueden escribir fácilmente
- Permite crear programas sencillos sin código complejo
-
JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism
- Introduce el Module-Lattice-Based Key Encapsulation Mechanism (ML-KEM) resistente a ataques cuánticos
- Refuerza la seguridad de claves simétricas y prepara ante ataques de computación cuántica
-
JEP 497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm
- Introduce el Module-Lattice-Based Digital Signature Algorithm (ML-DSA) resistente a ataques cuánticos
- Refuerza la protección contra alteración de datos y la autenticación del firmante
- Prepara la respuesta ante futuros ataques de computación cuántica
-
JEP 498: Warn upon Use of Memory-Access Methods in sun.misc.Unsafe
- Emite advertencias al usar métodos de acceso a memoria de
sun.misc.Unsafe
- Recomienda migrar a la API VarHandle y a la API FFM
-
JEP 499: Structured Concurrency (cuarta preview)
- Introduce concurrencia estructurada para tratar grupos de tareas relacionadas como una sola unidad de trabajo
- Simplifica el manejo de errores y la cancelación, y mejora la confiabilidad y la visibilidad
[Resumen de nuevas funciones de JDK 24]
-
Configurable New Session Tickets Count for TLSv1.3
-
Mechanism to Disable TLS Cipher Suites by Pattern Matching
- En el archivo de configuración
java.security, la propiedad jdk.tls.disabledAlgorithms permite deshabilitar suites de cifrado TLS
- Soporta pattern matching (se puede usar el comodín
_)
- Ejemplo:
"TLS_RSA_*" deshabilita todas las suites de cifrado que comienzan con TLS_RSA
-
New Option to Extract a JAR File to a Specific Directory Using the jar Tool
-
New Reader.of(CharSequence) Method
- Se agrega el nuevo método de fábrica estático
java.io.Reader.of(CharSequence)
- Permite leer de forma eficiente desde
String, StringBuilder y similares
-
New Method Process.waitFor(Duration)
- Se agrega el método
java.lang.Process#waitFor(Duration)
- Evita la confusión de unidades presente en
waitFor()
-
Support for Unicode 16.0
- Se agrega soporte para Unicode 16.0
- Se incorporan un total de 154,998 caracteres y 7 nuevas escrituras
- Garay (África occidental)
- Gurung Khema, Kirat Rai, Ol Onal, Sunuwar (India y Nepal)
- Todhri (Albania)
- Tulu-Tigalari (suroeste de India)
-
New JAR Command Option to Not Overwrite Existing Files
-
New MXBean to Monitor and Manage Virtual Thread Scheduler
- Se agrega la interfaz
jdk.management.VirtualThreadSchedulerMXBean
- Permite monitorear el estado y el paralelismo del scheduler de hilos virtuales
- Permite cambiar dinámicamente el paralelismo objetivo del scheduler
-
New jcmd Commands Thread.vthread_scheduler and Thread.vthread_pollers
- Se agregan nuevos comandos a la herramienta
jcmd
Thread.vthread_scheduler: muestra el estado del scheduler de hilos
Thread.vthread_pollers: muestra el estado de los pollers de I/O
-
Support for Including Security Properties Files
- El archivo de configuración
java.security ahora puede incluir otros archivos de propiedades
- Usa
include <ruta del archivo>
- La palabra clave
include no puede usarse como nombre de propiedad
-
Document Standard Hash and MGF Algorithms for RSASSA-PSS Signature
- Se documentan los algoritmos hash estándar y las funciones de generación de máscara disponibles para firmas RSASSA-PSS
-
SunPKCS11 Provider Is Enhanced to Use CKM_AES_CTS Mechanism
- El proveedor SunPKCS11 agrega soporte para la transformación AES/CTS
- Se agrega la nueva propiedad de configuración
cipherTextStealingVariant (CS1, CS2, CS3)
- En NSS, el valor predeterminado se establece en CS1
-
New Summary Page for External Specifications
- Se agrega una página de resumen para ver de un vistazo las especificaciones externas referenciadas por Java SE y la API de JDK
-
jpackage Supports WiX Toolset v4 and v5 on Windows
jpackage agrega soporte para WiX Toolset v4 y v5
- Selecciona automáticamente la versión más reciente del instalador
- Convierte automáticamente recursos personalizados en formato WiX v3 al formato v4
-
Add W3C DTDs and XSDs to the JDK Built-in Catalog
- Se agregan DTD y XSD de W3C al catálogo XML integrado del JDK
- Pueden cargarse localmente sin red
- Elementos agregados:
- espacio de nombres xml
- XML Schema Part 1 & 2
- XHTML 1.0 & 1.1
- DTD de la especificación XML de W3C
4 comentarios
Project Valhalla realmente lleva muchísimo tiempo en desarrollo, así que espero que dé buenos frutos.
En lo personal, espero bastante de la estructura plana de las value classes, porque reduce las referencias por puntero y eso podría traer ventajas en la velocidad de acceso a memoria.
Parece que está recibiendo mucha de la influencia (positiva) de Kotlin. Últimamente he estado usando el lenguaje Kotlin y estoy realmente satisfecho, pero también apoyo a Java, que podría considerarse su origen.
Structured Concurrency y Scoped Value generan muchísimas expectativas.
Opiniones en Hacker News
SecurityManager desapareció silenciosamente. Un profesor que enseñaba una materia optativa de Java en el pasado solía enfatizar mucho las ventajas de SecurityManager. En ese entonces era muy escéptico, y ahora me da satisfacción ver que ese escepticismo estaba en lo correcto
Quiero que termine la vista previa de la concurrencia estructurada. Esto ayuda a Java a cerrar la última brecha frente a golang en cuanto a la facilidad de la programación concurrente. Go facilita los canales y los wait groups. La concurrencia estructurada permite usar estos elementos básicos para escribir y entender tareas de nivel más alto con mayor facilidad
Que ya no exista el pinning de hilos virtuales es una gran ventaja. Ahora se pueden usar hilos virtuales casi sin restricciones
Da gusto ver que Streams sigue siendo querido. En la empresa hacemos muchas entrevistas estilo fizzbuzz, y quienes eligen Java y usan streams por lo general aprueban. Esto demuestra la ergonomía y la intuición del lenguaje, así como el poder de la abstracción. Los streams de Java son tan poderosos como las cadenas de operaciones de estilo funcional de Ruby, pero de hecho tienen buen rendimiento
Nuevas funciones: enlace al proyecto OpenJDK 24
Las versiones para ARM32 y Risc-V estarán disponibles pronto aquí
Raspberry 2 y Vision Five 2 son hardware muy orientado al futuro que Oracle y OpenJDK ignoran
Pregunta sobre la diferencia de licencias entre usar OpenJDK y las versiones oficiales de Oracle JDK
Sorprende que todavía no se haya mencionado JEP 491. Esto garantiza que la palabra clave "synchronized" no arruine los hilos virtuales. Es una gran ventaja para ejecutar código existente sobre hilos virtuales
La evolución de versiones de Java en los últimos años ha sido interesante. Pasó por Java 9, 10 y 11 LTS, y aun así sigo usando Java 8. Hay demasiado por hacer
Al comparar las versiones más recientes de Java y Kotlin, Java sigue mejorando y adoptando funciones de Kotlin, pero Kotlin también sigue mejorando por su cuenta
GraalVM también se puede usar con Java 24. Tiene muchas funciones buenas
Por fin desapareció el pinning en los hilos virtuales