Java 9 está aquí: todo lo que necesita saber

Java 9, formalmente, Java Platform Standard Edition versión 9, finalmente está aquí, y su Java Development Kit (JDK) está disponible para que los desarrolladores lo descarguen.

Tiene varias características nuevas importantes aunque controvertidas, pero también es la última de la línea para el antiguo estilo de entrega de Java.

Dónde descargar Java 9 JDK

Oracle ha publicado el JDK y la documentación de Java SE 9 para que los desarrolladores los descarguen.

Las nuevas funciones clave de Java 9

Debutando casi tres años después de Java SE 8, Java SE 9 tiene varios cambios arquitectónicos clave, así como una serie de mejoras.

La modularidad de Java 9 cambia las reglas del juego

Las nuevas y controvertidas capacidades de modularidad, basadas en Project Jigsaw, seguramente despertarán el interés de las tiendas Java de vanguardia que quieren ver lo que JDK 9 tiene para ofrecer ahora, incluso si las tiendas más conservadoras deciden esperar a que madure la modularidad.

La modularidad, en forma de Java Platform Module System, divide el JDK en un conjunto de módulos para combinar en el momento de la ejecución, la compilación o la compilación. La modularidad se ha denominado un cambio "transitivo", que permite la comprensión de las dependencias entre módulos.

Se supone que la modularidad de Java 9 permite a los desarrolladores ensamblar y mantener aplicaciones sofisticadas más fácilmente. Además, debería hacer que Java sea más capaz de escalar a dispositivos más pequeños mientras se mejoran la seguridad y el rendimiento.

Los aspectos de modularidad de Java 9 incluyen el empaquetado de aplicaciones, la modularización del propio JDK y la reorganización del código fuente en módulos. El sistema de compilación se ha mejorado para compilar módulos y hacer cumplir los límites de los módulos en el momento de la compilación. Las imágenes de JDK y Java Runtime Environment (JRE) se reestructuran para manejar módulos. Además, los controles de interfaz de usuario de JavaFX y las API de CSS ahora son accesibles por modularidad.

Se admiten una gran cantidad de configuraciones; como resultado, se deben mejorar la escalabilidad, la seguridad y el rendimiento de las aplicaciones. El escalado más fácil de Java a dispositivos pequeños es un factor clave del esfuerzo modular.

Con la modularidad, los desarrolladores podrán construir y mantener bibliotecas y aplicaciones grandes tanto para Java SE (Standard Edition) como para Java EE (Enterprise Edition). Pero durante el desarrollo de Java 9, Oracle, IBM, Red Hat y otros tuvieron grandes desacuerdos sobre exactamente cómo hacer un cambio tan radical en la plataforma. El sistema de módulos en sí fue rechazado en mayo, solo para ser aprobado en una segunda votación en junio, después de que se lograron avances.

Incluso con el acuerdo entre los principales proveedores de Java, sigue habiendo controversia sobre si la modularidad hará mucho bien a los desarrolladores de Java, con algunos expertos diciendo que sí y otros que no. Independientemente, Java 9 ahora está modularizado.

Para facilitar la migración a Java 9 modularizado, Java 9 permite el acceso reflectante ilegal para el código en la ruta de clases, utilizado por el JRE para buscar clases y archivos de recursos. Esta capacidad no estará permitida después de Java 9.

Mejoras del compilador para el código Java 9

La actualización de Java 9 presenta varias capacidades nuevas para compilar código, la principal de las cuales es la compilación anticipada (AoT). Aún en una fase experimental, esta capacidad permite la compilación de clases Java en código nativo antes de ser lanzada en la máquina virtual. Esta función está destinada a mejorar el tiempo de inicio de aplicaciones pequeñas y grandes, con un impacto limitado en el rendimiento máximo.

Los compiladores Just-in-time (JIT) son rápidos, pero los programas Java se han vuelto tan grandes que el JIT tarda mucho en calentarse por completo, lo que deja algunos métodos Java sin compilar y debilita el rendimiento. La compilación anticipada está destinada a abordar estos problemas.

Pero a Dmitry Leskov, director de marketing del proveedor de tecnología Java Excelsior, le preocupa que la tecnología de compilación anticipada no esté lo suficientemente madura y desea que Oracle haya esperado hasta Java 10 para obtener una versión más sólida.

Java 9 también ofrece la fase dos de la implementación de compilación inteligente de Oracle. Esta característica implica mejorar la s javac estabilidad y la portabilidad de la  herramienta para que pueda usarse en la JVM (máquina virtual Java) de forma predeterminada. La herramienta también se generalizará para que se pueda utilizar para grandes proyectos fuera del JDK. JDK 9 también ha actualizado el  javac compilador para que pueda compilar programas de Java 9 para que se ejecuten en algunas versiones anteriores de Java.

Otra característica de compilación nueva, pero experimental, es la interfaz de compilación de JVM de nivel Java (JVMCI). Esta interfaz permite que la JVM utilice un compilador escrito en Java como compilador dinámico. La API de JVMCI proporciona mecanismos para acceder a estructuras de VM, instalar código compilado y conectarse al sistema de compilación de JVM.

Escribir un compilador JVM en Java debería permitir un compilador de alta calidad que sea más fácil de mantener y mejorar que los compiladores existentes escritos en C o C ++. Como resultado, los compiladores escritos en Java mismo deberían ser más fáciles de mantener y mejorar. Otros esfuerzos existentes para habilitar compiladores en Java incluyen el Proyecto Graal y el Proyecto Metropolis.

Una nueva capacidad de control del compilador está destinada a proporcionar un control detallado y dependiente del contexto del método de los compiladores JVM, lo que permite a los desarrolladores cambiar las opciones de control del compilador en tiempo de ejecución sin degradación del rendimiento. La herramienta también permite soluciones para los errores del compilador de JVM.

REPL finalmente llega a Java 9

Java 9 incluye una herramienta de bucle de lectura-evaluación-impresión (REPL), otro objetivo a largo plazo para Java que se está volviendo realidad en esta versión, después de años de desarrollo en el Proyecto Kulia.

Llamado jShell, el REPL de Java 9 evalúa de forma interactiva declaraciones y expresiones declarativas. Los desarrolladores pueden obtener comentarios sobre los programas antes de la compilación simplemente ingresando algunas líneas de código.

Las capacidades de la herramienta de línea de comandos incluyen la finalización de tabulación y la adición automática de los puntos y comas necesarios en la terminal. La API jShell permite la funcionalidad jShell en IDE y otras herramientas, aunque la herramienta en sí no es un IDE.

La falta de un REPL se ha citado como una razón para que las escuelas se alejen de Java. (Lenguajes como Python y Scala han tenido un REPL durante mucho tiempo). Pero el fundador del lenguaje Scala, Martin Odersky, cuestiona la utilidad de un REPL en Java, diciendo que Java está orientado a declaraciones mientras que los REPL están orientados a expresiones.

Mejoras en la API Streams en Java 9

Los flujos en Java permiten a los desarrolladores expresar cálculos para que el paralelismo de datos se pueda explotar de manera eficiente. La capacidad Stream en Java 8 es para procesar datos de forma declarativa mientras se aprovechan las arquitecturas multinúcleo.

En Java 9, la API de Streams agrega métodos para tomar y soltar elementos de Stream de forma condicional, iterar sobre elementos de Stream y crear un flujo a partir de un valor que acepta valores NULL mientras expande el conjunto de API de Java SE que pueden servir como fuentes de Streams.

La caché de código se puede dividir en Java 9

JDK 9 permite que la caché de código se divida en segmentos para mejorar el rendimiento y permitir extensiones como el bloqueo detallado. Los resultados deberían mejorar los tiempos de barrido debido a que los iteradores especializados omiten el código que no es de método; separar código sin método, perfilado y no perfilado; y mejorar el tiempo de ejecución de algunos puntos de referencia. 

Mejor respaldo de JavaScript en Java 9 a través del Proyecto Nashorn

Project Nashorn, que proporciona un tiempo de ejecución de JavaScript ligero para Java, se está mejorando en JDK 9. El proyecto Nashorn fue un esfuerzo para implementar un tiempo de ejecución de JavaScript ligero pero de alto rendimiento en Java, siguiendo el proyecto Rhino que se inició en Netscape. Project Nashorn se encargó de permitir la incorporación de JavaScript en aplicaciones Java. Proporcionó a Java un motor JavaScript en JDK 8.

JDK 9 incluye una API de analizador para el árbol de sintaxis ECMAScript de Nashorn. La API permite el análisis de código ECMAScript por IDE y marcos del lado del servidor sin depender de las clases de implementación internas del Proyecto Nashorn.

La API de cliente HTTP / 2 llega a Java 9

La API de cliente HTTP / 2 beta ha llegado a JDK 9, implementando en Java la actualización al protocolo HTTP central de la web. WebSocket también es compatible con la API.

La API HTTP / 2 puede reemplazar la API HttpURLConnection, que ha tenido problemas, incluido el diseño con protocolos ahora desaparecidos, anterior a HTTP / 1, ser demasiado abstracta y difícil de usar.

Compatibilidad mejorada con HTML5 y Unicode en Java 9

En JDK 9, la herramienta de documentación de Javadoc está mejorada para generar marcado HTML5. También se admite el estándar de codificación Unicode 8.0, que agrega 8.000 caracteres, 10 bloques y seis scripts.

La API de seguridad DTLS se agrega a Java 9

Por seguridad, Java 9 agrega una API para DTLS (Datagram Transport Layer Security). El protocolo ha sido diseñado para evitar escuchas, manipulaciones y falsificaciones de mensajes en las comunicaciones cliente / servidor. Se proporciona una implementación para los modos cliente y servidor.

Lo que Java 9 desaprueba y elimina

Java 9 desaprueba o elimina varias funciones que ya no están de moda. El principal de ellos es la API de Applet, que está en desuso. Ha pasado de moda ahora que los fabricantes de navegadores conscientes de la seguridad han eliminado el soporte para los complementos de navegador de Java. La llegada de HTML5 también ayudó a provocar su desaparición. Los desarrolladores ahora son guiados a alternativas como Java Web Start, para iniciar aplicaciones desde un navegador o aplicaciones instalables. 

La herramienta appletviewer también está en desuso.

Java 9 también desaprueba el recolector de basura Concurrent Mark Sweep (CMS), con soporte para cesar en una versión futura. La intención es acelerar el desarrollo de otros recolectores de basura en la máquina virtual HotSpot. El recolector de basura G1 de pausa baja está destinado a ser un reemplazo a largo plazo para CMS.

Mientras tanto, las combinaciones de recolección de basura previamente desaprobadas en JDK 8 se eliminan en JDK 9. Estas incluyen combinaciones raramente utilizadas como Incremental CMS, ParNew + SerialOld y DefNew + CMS, que agregaron complejidad adicional a la base del código del recolector de basura.

Java 9 también omite las advertencias de Java en las declaraciones de importación, para ayudar a que las bases de código grandes no tengan advertencias de pelusa. Con estas bases de código, la funcionalidad obsoleta a menudo debe ser compatible durante algún tiempo, pero la importación de una construcción obsoleta no garantiza un mensaje de advertencia si los usos de la construcción son intencionales y se suprimen.

También se elimina en Java 9 la capacidad de seleccionar el JRE en el momento del lanzamiento mediante la función Multiple JRE (mJRE). La capacidad rara vez se usó, complicó la implementación del lanzador de Java y nunca se documentó por completo cuando debutó en JDK 5.

Oracle ha eliminado el agente hprof (Heap Profiling) de JVM TI (interfaz de herramientas), que se ha reemplazado en la JVM. La herramienta jhat también se eliminó, ya que quedó obsoleta gracias a visualizadores y analizadores de montón superiores.

Java 9 es el final de su línea a medida que comienza la nueva línea de Java 9

Se podría decir que Java 9 está saliendo con fuerza, con todas las nuevas capacidades. Oracle reveló recientemente que Java 9 es el último de su tipo, en términos de su designación y el tiempo transcurrido entre las principales versiones.

A partir de ahora, se planea que Java tenga una cadencia de lanzamiento de seis meses, con la próxima versión principal, que se llamará Java 18.3, que saldrá en marzo de 2018, seguida de Java 18.9 seis meses después.

La nueva cadencia de lanzamiento de Java también significa que JDK 9 no se designará como un lanzamiento de soporte a largo plazo. En cambio, la próxima versión a largo plazo será Java 18.9.

La cadencia de lanzamiento más rápida de Java significa que los desarrolladores no tendrán que esperar tanto tiempo para los lanzamientos principales. También puede significar que los desarrolladores se saltearán Java 9 y sus características de modularidad "inmaduras" y esperarán seis meses para la nueva versión, lo que probablemente resolvería cualquier problema. problemas, dijo Simon Maple, director de promoción de Java en el proveedor de herramientas Java ZeroTurnaround.