Llegamos a ustedes gracias a:



Noticias

JDK 17: Las novedades de Java 17

[04/05/2021] Aunque no está previsto hasta septiembre, Java 17 ya ha empezado a tomar forma, con cuatro nuevas características previstas para la actualización de Java estándar hasta ahora. En el último cambio, a partir del 27 de abril, se eliminará el compilador experimental basado en Java ahead-of-time (AOT) y just-in-time (JIT).

El kit de desarrollo de Java (JDK) 17 será una versión de soporte a largo plazo (LTS, por sussiglas en inglés), con un soporte ampliado por parte de Oracle previsto para varios años.

Las características presentadas como parte del JDK 17 de OpenJDK incluyen:

  • Eliminación del compilador experimental AOT y JIT, que se ha utilizado poco pero que requiere un importante esfuerzo de mantenimiento. El plan prevé mantener la interfaz del compilador JVM a nivel de Java para que los desarrolladores puedan seguir utilizando versiones del compilador construidas externamente para la compilación JIT. La compilación AOT (la herramienta jaotc) se incorporó al JDK 9 como característica experimental. La herramienta utiliza el compilador Graal, que está escrito en Java, para la compilación AOT. Estas características experimentales no se incluyeron en las compilaciones del JDK 16 publicadas por Oracle y nadie se quejó. Según el plan prescrito, se eliminarían tres módulos del JDK: jdk.aot (la herramienta jaotc); internal.vm.compiler, el compilador Graal; y jdk.internal.vm.compiler.management, el MBean Graal. También se eliminará el código HotSpot relacionado con la compilación AOT.
  • Portar el JDK a MacOS/AArch64 en respuesta al plan de Apple para la transición de sus computadoras Macintosh de x64 a AArch64. Ya existe un puerto AArch64 para Java en Linux y se está trabajando en el de Windows. Los creadores de Java esperan reutilizar el código AArch64 existente de estos ports empleando la compilación condicional, como es la norma en los ports del JDK, para acomodar las diferencias en las convenciones de bajo nivel como la interfaz binaria de la aplicación y el conjunto de registros reservados del procesador. Los cambios para MacOS/AArch64 corren el riesgo de romper los ports existentes de Linux/AArch64, Windows/AArch64 y MacOS/x64, pero el riesgo se reducirá a través de las pruebas de pre-integración.
  • Desaprobación de la API de Applet para su eliminación. Esta API es esencialmente irrelevante, ya que todos los proveedores de navegadores web han eliminado la compatibilidad con los complementos de navegador de Java, o han anunciado planes para hacerlo. La API Applet fue previamente desaprobada, pero no para su eliminación, en Java 9 en septiembre del 2017.
  • Una nueva línea de renderizado para MacOS, utilizando la API Metal de Apple como alternativa a la línea existente que utiliza la API OpenGL obsoleta. Esta propuesta pretende proporcionar un pipeline de renderizado totalmente funcional para la API 2D de Java que utilice el framework Metal de MacOS, y esté listo en caso de que Apple elimine la API OpenGL de una futura versión de MacOS. Se pretende que el pipeline tenga una paridad funcional con el pipeline OpenGL existente, con un rendimiento tan bueno o mejor en determinadas aplicaciones y puntos de referencia. Se crearía una arquitectura limpia que se ajustaría al actual modelo Java 2D. El pipeline coexistiría con el pipeline de OpenGL hasta que quede obsoleto. El objetivo de la propuesta no es añadir ninguna nueva API de Java o JDK.
  • Generadores de números pseudoaleatorios mejorados que proporcionarían nuevos tipos de interfaz e implementaciones para los generadores de números pseudoaleatorios (PRNG), incluidos los PRNG saltables y una clase adicional de algoritmos PRNG divisibles (LXM). Una nueva interfaz, RandomGenerator, proporcionaría una API uniforme para todos los PRNG existentes y nuevos. Se proporcionarían cuatro interfaces RandomGenerator especializadas. La motivación del plan es un enfoque en múltiples áreas de mejora en el área de generación de números pseudoaleatorios en Java. El esfuerzo no requiere proporcionar implementaciones de otros numerosos algoritmos PRNG. Pero se han añadido tres algoritmos comunes que ya están ampliamente desplegados en otros entornos de lenguajes de programación. Los objetivos del plan incluyen: Facilitar el uso de varios algoritmos PRNG indistintamente en las aplicaciones; mejora del soporte para la programación basada en flujos, proporcionando flujos de objetos PRNG; eliminación de la duplicación de código en las clases PRNG existentes; preservación del comportamiento existente de la clase java.util.Random.

En los próximos meses, es probable que se propongan más características para JDK 17. Entre las posibilidades se encuentran una API de enlazador externo, una API de vectores y una API de acceso a memoria externa, todas ellas actualmente en fase de incubación en la versión de JDK 16 publicada el 16 de marzo. Las clases selladas, en un segundo avance en el JDK 16, podrían estar disponibles de forma general en el JDK 17. La concordancia de patrones podría ser también el centro de las propuestas del JDK 17.

El 14 de septiembre es la fecha de disponibilidad general del JDK 17. La versión de producción irá precedida de fases de rampdown en junio y julio, y de versiones candidatas en agosto. En jdk.java.net se pueden encontrar versiones de código abierto de acceso anticipado del JDK 17.

Las versiones LTS como el JDK 17 llegan cada tres años. La última versión LTS, JDK 11, se publicó en septiembre de 2018. Las nuevas versiones de Java llegan cada seis meses. La línea de lanzamiento actual de Java estándar es JDK 15.