Oracle anunció la disponibilidad de Java 17, la última versión de la plataforma de lenguaje de programación y desarrollo número uno del mundo. Ofrece miles de actualizaciones de rendimiento, estabilidad y seguridad, así como 14 JEPs (propuestas de mejora de JDK) que mejoran aún más el lenguaje y la plataforma Java para ayudar a los desarrolladores a ser más productivos.
Java 17 es la última versión de soporte a largo plazo (LTS, por sus siglas en inglés) dentro la cadencia de lanzamiento semestrales de Java y es el resultado de una amplia colaboración entre los ingenieros de Oracle y otros miembros de la comunidad global de desarrolladores de Java a través de la Comunidad Open JDK y el Proceso de la Comunidad Java (JCP, por sus siglas en inglés). Desde el lanzamiento del anterior JDK 11 LTS hace tres años, se han implementado más de 70 JEP.
Oferta de una licencia más sencilla
Oracle JDK 17 y las versiones futuras de JDK están destinadas a simplificar las licencias y los derechos de Java. Se proporcionan bajo una licencia gratuita para su uso hasta un año completo después del lanzamiento de la próxima versión, LTS. Oracle también planea continuar proporcionando versiones de Oracle OpenJDK bajo la licencia Pública General (GPL) de código abierto, como lo ha hecho desde 2017.
Mejora del soporte y atención al cliente a largo plazo
Oracle está colaborando con la comunidad de desarrolladores de Java y JCP para mejorar la programación de LTS para brindar a las organizaciones más flexibilidad sobre cuándo, o si, desean migrar a una versión más reciente de Java LTS. Oracle propone que la próxima versión LTS sea Java 21 y planea que esté disponible en septiembre de 2023, lo que cambiará la cadencia de versiones LTS de tres a dos años.
Con el respaldo de suscripción de Oracle LTS y Java SE, los clientes podrán migrar a Java 17 al ritmo que mejor se adapte a sus necesidades. Oracle proporcionará a los clientes actualizaciones de seguridad, rendimiento y corrección de errores para Java 17 hasta al menos septiembre de 2029.
«En los últimos tres años, hemos escuchado cuánto aman los desarrolladores las últimas funcionalidades y características, y hemos visto que el ecosistema realmente adopta la cadencia de lanzamiento de seis meses», dijo Georges Saab, vicepresidente de desarrollo de Java Platform Group de Oracle. «Uno de los mayores desafíos a los que se enfrentan los desarrolladores de Java hoy en día es que su organización sólo les permite usar la última versión de LTS. Al trasladar las versiones de LTS a cada dos años, los desarrolladores que trabajan con organizaciones conservadoras ahora tienen más opciones y acceso a las funciones que aman y quieren usar».
«Oracle está realizando cambios que beneficiarán significativamente a la comunidad Java al cambiar las versiones de soporte a largo plazo a una cadencia de dos años e introducir una licencia nueva y más flexible que proporciona el uso gratuito de Oracle JDK en producción durante un tiempo prolongado», dijo el Dr. Arnal Dayaratna, vicepresidente de investigación y Desarrollo de Software de IDC. «Estos cambios darán a las organizaciones una mayor flexibilidad para gestionar la complejidad del desarrollo e implementación de aplicaciones modernas en la nube, en las instalaciones y en entornos híbridos».
Acelerando la adopción de Java en la nube
Java es una de las plataformas de desarrollo más exitosas de todos los tiempos y se basa en innovaciones continuas que satisfacen las necesidades cambiantes de los desarrolladores. Para acelerar la adopción de Java en la nube, Oracle presentó recientemente Oracle Java Management Service, un nuevo servicio nativo de Oracle Cloud Infrastructure (OCI) para ayudar a las organizaciones a administrar los tiempos de ejecución de Java y las aplicaciones en las instalaciones o en cualquier nube.
Java Management Service ofrece a los clientes visibilidad de sus implementaciones de Java en toda la empresa. Esto abarca todas las versiones de Java instaladas en su entorno, incluidas las versiones de Java que se ejecutan en desarrollo y producción. También destaca cualquier aplicación Java no planificada que se está ejecutando y verifica que todas las versiones instaladas estén actualizadas con los últimos parches de seguridad.
JDK 17 incluye nuevas mejoras de lenguaje, actualizaciones de bibliotecas, compatibilidad con los nuevos ordenadores Apple, eliminación y mudanza de características heredadas, y trabajo para ayudar a garantizar que el código Java escrito hoy continúe funcionando sin cambios en futuras versiones de JDK. También proporciona una vista previa de características del lenguaje y la incubación API para recopilar comentarios de la comunidad Java. Las actualizaciones incluyen:
Mejora del lenguaje Java
∙ JEP 409: Clases selladas – Las clases e interfaces selladas restringen otras clases o interfaces que pueden extenderlas o implementarlas. Esta mejora es una más del Proyecto Amber, que tiene como objetivo aumentar la productividad de los desarrolladores a través de la evolución del lenguaje Java.
Actualizaciones y mejoras en las bibliotecas
∙ JEP 306: Restaurar la semántica de punto flotante siempre estricta – El lenguaje de programación Java y la máquina virtual Java originalmente solo tenían una semántica estricta de punto flotante. A partir de Java 1.2, se permiten pequeñas variaciones en esta semántica estricta de forma predeterminada para adaptarse a las limitaciones de las arquitecturas de hardware de entonces. Estas variaciones ya no son útiles ni necesarias, por lo que fueron eliminadas por la JEP 306.
∙ JEP 356: Generador de números pseudoaleatorios mejorado – Proporciona nuevos tipos de interfaz e implementaciones para generadores de números pseudoaleatorios (PRNG por sus siglas en inglés). Este cambio mejora la interoperabilidad de diferentes PRNG y facilita la solicitud de un algoritmo basado en requisitos en lugar de codificar una implementación específica.
∙ JEP 382: Nueva pipeline de renderizado de macOS: implementa una pipeline Java 2D para macOS utilizando la API de Apple Metal. La nueva canalización reducirá la dependencia de JDK de la obsoleta API OpenGL de Apple.
Nueva compatibilidad con plataformas
∙ JEP 391: Puerto macOS AArch64 – Puertos JDK para la plataforma macOS / AArch64. Este puerto permitirá que las aplicaciones Java se ejecuten de forma nativa en los nuevos ordenadores Apple Silicon basados en Arm 64.
Mudanzas y eliminaciones
∙ JEP 398: Descontinuar la API de Applet para su eliminación – Todos los proveedores de navegadores web han eliminado el soporte para los plugins del navegador Java o han anunciado planes para hacerlo. La API de Applet quedó obsoleta, pero no para su eliminación, en Java 9 en septiembre de 2017.
∙ JEP 407: Eliminar la activación de RMI – Elimina el mecanismo de activación de invocación de método remoto (RMI), preservando el resto de la RMI.
∙ JEP 410: Eliminar el compilador experimental AOT y JIT – El compilador experimental basado en Java ahead-of-time (AOT) y just-in-time (JIT) fueron características experimentales que no tuvieron mucha adopción. Al ser opcionales, ya se eliminaron de JDK 16. Este JEP elimina estos componentes del código fuente de JDK.
∙ JEP 411: Obsolescencia del Security Manager para su eliminación – Security Manager se remonta a Java 1.0. No ha sido el medio principal de proteger el código Java del lado del cliente durante muchos años, y rara vez se ha usado para proteger el código del lado del servidor. Eliminarlo en una versión futura ayudará a eliminar una carga de mantenimiento significativa y permitirá que la plataforma Java avance.
Programas Java a prueba de futuro
∙ JEP 403: Encapsular fuertemente los elementos internos de JDK – Ya no será posible relajar la fuerte encapsulación de elementos internos a través de una única opción de línea de comandos, como fue posible en JDK 9 hasta JDK16. Podrá seguir accediendo a las API internas existentes, pero ahora requerirá enumerar, como parámetros de línea de comandos o atributos de manifiesto del archivo JAR, cada uno de los paquetes cuya encapsulación debe relajarse. Este cambio dará lugar a aplicaciones más seguras y menos dependencias en los detalles de implementación internos no estándar de JDK.
Pre visualizaciones e incubadoras para versiones posteriores de JDK
∙ JEP 406: Coincidencia de patrones para el switch (preview) – Permite probar una expresión en múltiples patrones, cada uno con una acción específica, de modo que las consultas complejas basadas en datos se pueden expresar de manera concisa y segura.
∙ JEP 412: API de memoria y función externa (incubadora) – mejora las API de incubación introducidas en JDK 14 y JDK 15 que permiten a los programas Java inter operar con código y datos fuera del tiempo de ejecución de Java. Al invocar de manera eficiente funciones externas (es decir, código fuera de la JVM) y acceder de forma segura a la memoria externa, estas API permiten a los programas Java llamar a bibliotecas nativas y procesar datos nativos sin la fragilidad y complejidad de la interfaz nativa de Java (JNI). Estas APIs se están desarrollando en el marco del Proyecto Panamá, que tiene como objetivo mejorar la interacción entre el código Java y el no Java.
∙ JEP 414: API Vectorial (Segunda incubadora) – Le permite expresar cálculos vectoriales que se compilan de manera confiable en tiempo de ejecución para instrucciones vectoriales optimizadas en arquitecturas de CPU compatibles, logrando así un rendimiento superior a los cálculos de escala equivalentes.