Saltar al contenido

5 cosas que debes saber sobre Java 9

El 21 de septiembre, llegó Java 9. Más de tres años después de Java 8, un gran lanzamiento de Java está finalmente en manos de los desarrolladores. La gran pregunta es: ¿qué significan para usted los cambios en Java 9?

Java 9 marca un punto de inflexión en el ciclo de lanzamiento de Java. Antes de llegar a eso, discutiremos las nuevas características para desarrolladores en Java 9. Desde una perspectiva operacional, hay mejoras en la seguridad y el rendimiento. Pero hay mucho más para desempacar en este lanzamiento. Revisaré cinco de los cambios más emocionantes que deberían animarles a adoptar Java 9.

5 cosas que debes saber sobre Java 9
5 cosas que debes saber sobre Java 9

1. Modularidad

Empecemos con la característica más destacada de Java 9: el sistema de módulos de la plataforma Java. Un problema de larga data con Java era su biblioteca monolítica de tiempo de ejecución. Veinte años de desarrollo en una plataforma tan grande como la de Java le pasan factura. Muchas clases se enredaron, como era de esperar en una gran base de código monolítico. Aún más preocupante fue el hecho de que no había una forma real de encapsular clases de implementación privadas en el JDK. Esto llevó a la proliferación de bibliotecas externas que dependían de estos detalles internos, y esto obstaculizó la evolución de la plataforma.

Con Java 9, el propio JDK está modularizado y se envía con unos 90 módulos distintos. Un módulo agrupa paquetes relacionados. Sólo los paquetes que se exportan explícitamente de un módulo son accesibles a otros módulos. Finalmente, las clases de implementación interna pueden ser realmente encapsuladas. Además, los módulos pueden expresar dependencias explícitas con otros módulos. Estas dependencias son siempre verificadas por el sistema de módulos tanto en tiempo de compilación como en tiempo de ejecución.

Los módulos pueden ser usados para modular las aplicaciones también y no sólo el JDK en sí mismo. En lugar de utilizar el frágil classpath (donde los JAR duplicados, faltantes o inconsistentes pasan desapercibidos hasta el momento de su ejecución), ahora puede crear sus propios módulos con paquetes encapsulados y dependencias explícitas.

Los módulos ofrecen un camino hacia aplicaciones mejor estructuradas y más fiables. Sin embargo, el sistema de módulos de Java no cambiará el paisaje de Java de la noche a la mañana. Los módulos afectan al diseño de su aplicación y se manifiestan en todas las fases de desarrollo: desarrollo, compilación, empaquetado y en tiempo de ejecución. Pasará tiempo antes de que se adopte ampliamente el sistema de módulos. Afortunadamente, se admiten muchos escenarios de migración para avanzar gradualmente hacia aplicaciones y bibliotecas modularizadas. Puede aprender más sobre el trabajo con módulos en Java 9 con este curso.

2. Productividad

Además del sistema de módulos, Java 9 está repleto de pequeñas características que mejoran la productividad de los desarrolladores. Por ejemplo, los métodos de fábrica de colecciones permiten crear colecciones inmutables con elementos predefinidos en una sola declaración. No se necesitan más soluciones provisionales incómodas para crear pequeñas colecciones predefinidas.

Otro gran impulsor de la productividad es JShell, un bucle de lectura-evaluación-impresión para código Java. En lugar de compilar y ejecutar pequeñas clases para probar el código, puede escribir y evaluar interactivamente fragmentos de Java en JShell. La programación exploratoria adquiere un nuevo significado cuando se obtiene una respuesta instantánea de un REPL. JShell ya está integrado con IDEs como el IntelliJ IDEA, permitiéndole abrir un entorno interactivo con acceso al código de su aplicación.

3. Seguridad

Las características de productividad de los desarrolladores están lejos de ser la única razón para adoptar Java 9. La plataforma en sí misma ha ganado muchas características nuevas que mejoran la seguridad también. La mayoría de las mejoras de seguridad en Java 9 están relacionadas con la seguridad de la red. Las versiones más recientes de (D)TLS son ahora compatibles con conexiones HTTPS seguras. Además, se admite el grapado de certificados (que permite una comprobación eficaz de la revocación de certificados).

Otra mejora de la seguridad es la capacidad de filtrar los datos de serialización entrantes. La serialización ha sido la pesadilla de la existencia de Java, lo que ha llevado a muchos exploits de seguridad en los últimos años. Ahora se puede adoptar un enfoque de lista blanca o lista negra para filtrar los flujos de datos de serialización entrantes, minimizando la superficie de ataque de la serialización de Java.

4. 4. Rendimiento

Ejecutar una nueva versión de Java a menudo significa obtener mejoras de rendimiento sin cambiar ningún código. Java 9 no es una excepción. Un ejemplo de tal mejora es la característica de Compact Strings. Cualquier cadena que se pueda representar completamente con sólo el conjunto de caracteres ASCII (en contraposición a las cadenas que contienen caracteres del conjunto completo de caracteres Unicode), se almacena con un solo byte por carácter. Las cadenas que tienen caracteres fuera del rango ASCII ocupan sus habituales dos bytes por carácter. La mayoría de las aplicaciones tienen una buena cantidad de objetos de cadenas en el montón. Si se trata de cadenas «simples», esto se traduce en una buena reducción del uso de la memoria.

Otro cambio importante en Java 9 es el cambio al Colector de Basura G1 (Garbage First) como colector de basura por defecto. Diseñado para ser usado con grandes montones, ofrece objetivos de tiempo de pausa afinables y puede hacer una recolección de basura incremental. El impacto de este cambio depende de las características de sus aplicaciones. En general, obtendrás una ejecución de código de menor latencia con menos pausas de GC «stop-the-world». A su vez, G1GC utiliza un poco más de potencia de CPU para conseguirlo. En cualquier caso, es importante probar el comportamiento de este recolector de basura en sus aplicaciones particulares cuando se mueva a Java 9. En algunos casos, los patrones de asignación no se adaptan del todo al enfoque de G1GC y es necesario cambiar a otro GC (o ajustar G1GC).

Aprenda más sobre las nuevas características relacionadas con la productividad, la seguridad y el rendimiento de los desarrolladores con este curso.

5. Ciclo de liberación

Hasta ahora nos hemos centrado en las características de Java 9. Pero hay otra razón por la que Java 9 es un lanzamiento importante: marca el final de la era de los lanzamientos de Java «basados en características». En el pasado, se seleccionaron algunas grandes características, y cuando estaban listas, se hizo una nueva versión importante de Java. En la práctica, esto llevó a que transcurrieran al menos tres años entre cada lanzamiento importante. Eso no es aceptable hoy en día, así que el Oracle y el proyecto OpenJDK están cambiando a versiones basadas en el tiempo.

Ahora, cada 6 meses una nueva versión de Java será lanzada. Contendrá cualquier característica que esté lista para ese momento. Entre estas versiones de 6 meses, las actualizaciones con correcciones críticas pueden ser lanzadas cuando sea necesario. Este nuevo programa de lanzamiento tiene varias implicaciones. Primero, los lanzamientos de Java se vuelven más frecuentes y predecibles. El plan actual es lanzar Java en marzo y septiembre de cada año. El nuevo esquema de números de versión propuesto para incrementar la versión principal cada seis meses, lo que significa que el próximo lanzamiento en marzo de 2018 será Java 10. Sin embargo, el esquema de la versión todavía está en discusión.

Actualizar su versión de Java cada 6 meses no es una perspectiva tentadora para muchas organizaciones. Por lo tanto, habrá versiones de apoyo a largo plazo (LTS) designadas cada tres años. La primera versión LTS será la de septiembre de 2018. Eso también significa que Java 9 no será una de las versiones con soporte a largo plazo.

Entonces, ¿Java 9 es adecuado para ti?

¿Significa el nuevo calendario de lanzamiento que no deberías adoptar Java 9 y esperar el primer lanzamiento de LTS a finales del próximo año? Desde la perspectiva de las operaciones, esa es una estrategia atractiva. Desde una perspectiva de desarrollo, hay demasiados cambios importantes que surgen del JDK modularizado para posponer la adopción.

Mi consejo es que empiece a desarrollar su aplicación sobre Java 9 lo antes posible. No tienes que usar módulos para tu aplicación cuando te mueves a Java 9, son completamente opcionales. Sin embargo, el JDK está modularizado, así que tendrás que lidiar con la nueva realidad de encapsulación en el JDK. Incluso si su aplicación se ejecuta en el classpath, posponer el traslado al JDK modular hace que sea más difícil y costoso de tratar más tarde.

Una opción es empezar a usar el JDK 9 para desarrollar sus aplicaciones, pero aún así apuntar al JDK 8 como tiempo de ejecución. Una bandera $0027–release$0027 recientemente introducida apoya este escenario. Este curso de acción impide una actualización inmediata de su infraestructura, pero al mismo tiempo impide que se beneficie de las nuevas API y de las mejoras de rendimiento y seguridad. Adoptar Java 9 rápidamente le permite prepararse para el primer lanzamiento de soporte a largo plazo del próximo año. Después de eso, siempre puede elegir permanecer más tiempo en esta versión LTS.

Actualmente, el Oracle JDK se basa en OpenJDK, pero añade varias herramientas y características propietarias. Mirando hacia el futuro, Oracle también ha anunciado que abrirá las características comerciales que forman parte de las construcciones de Oracle JDK. El proyecto OpenJDK también va a enviar sus distribuciones binarias JDK bajo una licencia GPL. Al final, los binarios de Oracle y OpenJDK deberían converger. De nuevo, esto es un gran cambio en la situación actual y un gran paso hacia un Java más abierto.

Estas nuevas políticas de lanzamiento hacen que Java sea más ágil que nunca. Las grandes características se dividirán en pasos incrementales y se entregarán cada 6 meses. Las características se envían cuando están terminadas, y si se pierden una versión, siempre hay otra a sólo 6 meses de distancia. Incluso después de más de 20 años, Java sigue avanzando a un ritmo emocionante y acelerado.

¿Listo para adoptar Java 9? Pruebe nuestra plataforma de aprendizaje tecnológico.