Oracle anunció la semana pasada la disponibilidad de Java 21, la última versión de uno de los lenguajes de programación más populares del mundo. Java 21 (Oracle JDK 21) ofrece miles de mejoras de rendimiento, estabilidad y seguridad, con una plataforma optimizada que ayudará a los desarrolladores a incrementar la productividad e impulsar la innovación y el crecimiento en sus organizaciones. Oracle presentó las últimas funcionalidades de Java 21 en el evento Oracle CloudWorld, que se llevó a cabo en la ciudad de Las Vegas, Estados Unidos.
“Java sigue siendo el lenguaje y la plataforma preferidos para el desarrollo de aplicaciones sólidas, escalables y seguras que utilizan organizaciones y millones de personas en todo el mundo”, afirmó Georges Saab, vicepresidente sénior de Oracle Java Platform y presidente del órgano rector de OpenJDK. “Las más recientes mejoras de Java 21 permiten a los desarrolladores crear aplicaciones de mayor calidad aún más rápido que antes. Además, se ofrecerá soporte comercial durante al menos ocho años para permitir a los clientes migrar a su propio ritmo”.
La última versión de Java Development Kit (JDK) proporciona actualizaciones y mejoras en respuesta a 15 Enhancement Proposals (JEP). JDK 21 incluye mejoras en el lenguaje del proyecto Amber OpenJDK (plantillas de cadena, patrones de registro, coincidencia de patrones para switch, patrones y variables sin nombre, clases sin nombre y métodos principales de instancia); mejoras del proyecto Panama (API de funciones y memoria externa y API de vector); funciones relacionadas con el proyecto Loom (threads virtuales, valores delimitados y simultaneidad estructurada); actualizaciones de rendimiento (Generational ZGC); y funciones de mantenimiento y obsolescencia (obsolescencia del puerto x86 de 32 bits para eliminación y preparación para la invalidación de la carga dinámica de agentes).
“A pesar de los muchos lenguajes que hay en circulación, hoy en día, Java sigue presente en todas partes”, subraya Stephen O’Grady, analista principal y cofundador de RedMonk. “Aunque el mundo evolucione, la capacidad de adaptación de Java le permitirá seguir desempeñando un papel clave como fuente de valor para los desarrolladores”.
Índice de temas
Soporte de ocho años para Java 21
Oracle ofrecerá soporte a largo plazo para Java 21 durante al menos ocho años. Este periodo ampliado de soporte brinda a las organizaciones flexibilidad para mantener sus aplicaciones en producción más tiempo con un mantenimiento mínimo y, finalmente, migrar cuand lo deseen. Basándose en los comentarios de los clientes y en el uso del ecosistema Java, Oracle también ha anunciado que el soporte a largo plazo para Java 11 se amplía hasta enero de 2032, lo que proporciona al menos ocho años más de soporte y actualizaciones de Oracle.
Algunas de las actualizaciones significativas que incorpora Java 21 son:
Funciones del proyecto Loom
- JEP 444: Threads virtuales: optimiza significativamente el proceso de escritura, mantenimiento y observación de aplicaciones concurrentes de alto rendimiento mediante la introducción de threads virtuales ligeros en la plataforma Java. Al permitir a los desarrolladores solucionar problemas, depurar, perfilar y escalar fácilmente aplicaciones concurrentes con las herramientas y técnicas actuales de JDK, los threads virtuales aceleran el desarrollo de aplicaciones.
- JEP 446: Valores delimitados (vista previa): permite el uso compartido de datos inmutables en los threads y entre ellos. Esto incrementa la facilidad de uso, la comprensión, la solidez y el rendimiento de los proyectos de los desarrolladores.
- JEP 453: Simultaneidad estructurada (vista previa): simplifica la programación simultánea mediante la introducción de una API para simultaneidad estructurada. Esta ayuda a promover un estilo de programación simultánea que elimina los riesgos comunes derivados de la cancelación y el cierre (como fugas de threads y retrasos de cancelación) y mejora la observabilidad del código simultáneo. Esto ayuda a los desarrolladores a optimizar la gestión y la cancelación de errores, mejorar la fiabilidad e incrementar la observabilidad.
Actualizaciones de rendimiento
- JEP 439: Generational ZGC: mejora el rendimiento de las aplicaciones mediante la ampliación del liberador de recursos Z Garbage Collector (ZGC) para permitir mantener los objetos recientes y antiguos en generaciones independientes. Generational ZGC ayuda a mejorar la productividad de los desarrolladores al reducir la sobrecarga de memoria de pila necesaria y CPU de liberación de recursos para las aplicaciones, así como a reducir los riesgos de bloqueo de las asignaciones.
Actualizaciones y mejoras del lenguaje
- JEP 430: Plantillas de cadena (vista previa): simplifica el desarrollo de programas Java al facilitar la expresión de cadenas que incluyen valores calculados en tiempo de ejecución y mejora la seguridad de los programas que componen cadenas a partir de valores proporcionados por el usuario y las transfieren a otros sistemas. Además, se mejora la legibilidad de las expresiones que mezclan texto y expresiones, y se pueden crear valores no de cadena calculados a partir de texto literal y expresiones embebidas sin tener que pasar por una representación de cadena intermedia. Esto incrementa la productividad de los desarrolladores al hacer que el lenguaje Java sea más legible, modificable, y que se pueda mantener.
- JEP 440: Patrones de registro (tercera vista previa): mejora el lenguaje Java ampliando la coincidencia de patrones para desestructurar instancias de clases de registro, además de permitir la adición de patrones anidados. Esto permite a los desarrolladores ampliar la coincidencia de patrones a consultas de datos compuestas y más sofisticadas, lo que impulsa su productividad.
- JEP 441: Coincidencia de patrones para switch: amplía la expresividad y aplicabilidad de expresiones y sentencias switch al permitir que aparezcan patrones en las etiquetas de casos. Además, la seguridad de las sentencias switch se incrementa al requerir que las sentencias switch de patrón cubran todos los valores de entrada posibles, y todas las expresiones y sentencias de cambio existentes pueden seguir compilándose sin cambios y ejecutándose con semántica idéntica. Esto ayuda a los desarrolladores a optimizar y aumentar la fiabilidad de sus proyectos haciendo que el lenguaje Java sea más semántico para que las consultas complejas orientadas a datos se puedan expresar de forma concisa y segura.
- JEP 443: Patrones y variables sin nombre (vista previa): mejora el lenguaje Java al permitir que patrones sin nombre coincidan con un componente de registro sin indicar el nombre o tipo del componente, así como que las variables sin nombre se puedan inicializar pero no se puedan utilizar. Esto ayuda a simplificar el proceso de desarrollo al aumentar la legibilidad de los patrones de registro y mejorar la mantenibilidad de todo el código.
- JEP 445: Clases sin nombre y métodos principales de instancia (vista previa): ayuda a simplificar y mejorar la accesibilidad del lenguaje Java para que los educadores puedan introducir conceptos de programación de forma gradual. Al evitar la introducción de un dialecto de Java y una cadena de herramientas independientes para principiantes, los programas para estudiantes se pueden compilar y ejecutar con las mismas herramientas que compilan y ejecutan cualquier programa Java, lo que ayuda a las personas en formación a escribir programas básicos de una manera concisa y a ir enriqueciendo su código de forma armoniosa a medida que se amplían sus competencias. Esto ayuda a mejorar la productividad de los desarrolladores en formación al permitirles escribir sus primeros programas sin necesidad de comprender características del lenguaje diseñadas para grandes programas.
Funciones del proyecto Panama en vista previa
- JEP 434: API de memoria y funciones externas (tercera vista previa): permite que los programas Java interoperen con código y datos fuera del tiempo de ejecución de Java. Al invocar de forma eficaz funciones externas (esto es, código ajeno a Java Virtual Machine o JVM) y mediante el acceso seguro a memoria externa (es decir, no gestionada por JVM), la nueva API permite a los programas Java llamar a bibliotecas nativas y procesar datos nativos sin necesidad de utilizar Java Native Interface. Esto incrementa la facilidad de uso, la flexibilidad, el rendimiento y la seguridad para los desarrolladores.
- JEP 448: API de vector (sexta incubación): incluye una API para expresar cálculos de vector que recopilan de forma fiable en tiempo de ejecución instrucciones de vector en arquitecturas de CPU soportadas. Esto ayuda a los desarrolladores a mejorar el rendimiento de sus proyectos proporcionándoles acceso a una API que es capaz de expresar de forma clara y concisa una amplia gama de cálculos de vectores.
Java 21 es el resultado de una amplia colaboración entre ingenieros de Oracle y otros miembros de la comunidad mundial de desarrolladores Java a través de OpenJDK y Java Community Process (JCP). A estas nuevas mejoras se suma la compatibilidad de Java 21 con Java Management Service (JMS), un servicio nativo de Oracle Cloud Infrastructure (OCI) que proporciona un único panel para ayudar a las organizaciones a gestionar los tiempos de ejecución y aplicaciones Java en entornos locales o en cualquier nube. Para obtener más información sobre las funciones de Java 21, consulta el blogpost técnico sobre Java 21.
Java 21, con innovación en la nube
Java ofrece rendimiento, eficiencia e innovación óptimos cuando se despliega en la nube en OCI, y OCI es la primera nube a hiperescala compatible con Java 21. Los clientes obtienen una amplia gama de ventajas para toda su organización al ejecutar Java en OCI, incluidos gastos operativos más reducidos, un rendimiento mayor sin coste adicional y capacidad para modernizar sus aplicaciones Java existentes o crear nuevas aplicaciones utilizando las últimas funciones y funcionalidades. Oracle Java SE, Oracle GraalVM y Java SE Subscription Enterprise Performance Pack están disponibles de forma gratuita en OCI, lo que permite a los desarrolladores crear y desplegar aplicaciones que se ejecutan más rápido, mejor y con una rentabilidad optimizada.
Oracle Java Universal SE Subscription es una oferta de pago por consumo que proporciona a los clientes el mejor soporte posible, con soporte de clasificación para toda la cartera de Java, acceso a GraalVM Enterprise, Java SE Subscription Enterprise Performance Pack, acceso a las funciones avanzadas de Java Management Service y flexibilidad para realizar actualizaciones al ritmo de su negocio. Esto ayuda a las organizaciones de TI a hacer frente a la complejidad, limitar sus costes y mitigar los riesgos de seguridad.
La comunidad global de Java adopta Java 21
“Java 21 es una de las versiones más significativas de Java, ya que los threads virtuales tendrán un gran impacto en la forma en que desarrollamos y desplegamos aplicaciones asíncronas, desde microservicios hasta aplicaciones empresariales“, señala Venkat Subramaniam, fundador de Agile Developer, Inc. “Con poco esfuerzo de codificación, las aplicaciones de los desarrolladores pueden ampliarse para soportar un gran número de operaciones de IO y llamadas de servicios sin ejercer una presión indebida en los recursos. El aumento de la escala por un coste reducido supone una gran victoria para las organizaciones que confían en Java en producción“.
“Me encanta la función en vista previa de clases sin nombre y métodos principales de instancia de Java 21“, apunta Barry Burd, profesor de la Universidad Drew. “En mis cursos de nivel básico, los estudiantes pueden comenzar a trabajar de forma rápida y fácil sin confusión ni algarabía. En mis libros, puedo presentar ejemplos completos sin código repetitivo. Lo mejor es cómo se alinean estas nuevas funciones con la filosofía de diseño global de Java. Las clases sin nombre se suman a los paquetes y módulos sin nombre. Además, ofrecen compatibilidad retroactiva“.
“La función de recopilaciones secuenciadas de Java 21 es una gran mejora para la comunidad de desarrolladores. Estos ya no tienen que preocuparse de depender accidentalmente del orden de encuentro en una prueba JUnit que falle en el servidor de creación, actualización o en otro lugar“, explica Jeanne Boyarsky, Java Champion. “Con las recopilaciones secuenciadas, este orden se define de forma predeterminada, lo que significa que no habrá más sorpresas“.