Oracle anunció la disponibilidad de Java 17, la última versión de la plataforma de lenguaje de programación y desarrollo. Java 17 ofrece 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.
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 Publica General (GPL) de código abierto, como lo ha hecho desde 2017.
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.
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 permitieron pequeñas variaciones en esta semántica estricta de forma predeterminada para adaptarse a las limitaciones de las arquitecturas de hardware de entones. 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 un 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 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 JDK 16. 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.
Previsualizaciones 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 interoperar 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.