Novedades y nuevas características de Java 11
Escrito por
el , actualizado el .
blog
java
planeta-codigo
programacion
Enlace permanente
Comentarios
Java 11 es la primera versión de soporte extendido publicada o LTS bajo el nuevo ciclo de publicaciones que adoptó Java en la versión 9. Añade varias novedades importantes en cuanto a seguridad y elimina otras que en versiones anteriores ya fueron marcadas como desaconsejadas.
En la plataforma Java era habitual que entre versión y versión mayor pasasen varios años normalmente 3 o más. Este ciclo de publicaciones no se adapta a las necesidades de todas las empresas, organizaciones y usuarios. Algunas empresas y usuarios desean ciclos de publicaciones más cortos quizá con no tantas novedades en cada uno de ellos pero sí de forma más constante incorporando mejoras. Otras organizaciones necesitan confiar en una versión que tenga un ciclo de soporte largo para sus aplicaciones.
Para adaptarse a ambos requerimientos Java a partir de Java 9 adoptó un nuevo ciclo de publicaciones siendo cada seis meses para los que desean mejoras de forma regular y cada tres años para los que necesitan soporte extendido. Java 9 incorporó la esperada modularización que cambia la forma de desarrollo de las aplicaciones con numerosas mejoras. Java 10 añadió la inferencia de tipos para variables locales con la palabra reservada var. Ahora Java 11 siendo una versión de soporte extendido o LTS, el soporte de Java 11 está planificado que dure hasta 2023 y hasta 2026 de forma extendida lo que son 8 años de soporte.
Contenido del artículo
Introducción
En esta nueva versión de Java 11 publicada el 25 de septiembre de 2018 las novedades no son tan relevantes como lo fuero Java 8 con las lambadas y Java 9 con los módulos pero continúa con las mejoras incrementales y proporciona una versión LTS en la que empresas grandes confiarán como base para sus desarrollos.
- Características de Java 11
- Notas de publicación de Java 11
- Documentación de Java 11
- Documentación Javadoc de Java 11
Las mejoras incluídas en esta versión son:
- 181: Nest-Based Access Control
- 309: Dynamic Class-File Constants
- 315: Improve Aarch64 Intrinsics
- 318: Epsilon: A No-Op Garbage Collector
- 320: Remove the Java EE and CORBA Modules
- 321: HTTP Client (Standard)
- 323: Local-Variable Syntax for Lambda Parameters
- 324: Key Agreement with Curve25519 and Curve448
- 327: Unicode 10
- 328: Flight Recorder
- 329: ChaCha20 and Poly1305 Cryptographic Algorithms
- 330: Launch Single-File Source-Code Programs
- 331: Low-Overhead Heap Profiling
- 332: Transport Layer Security (TLS) 1.3
- 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
- 335: Deprecate the Nashorn JavaScript Engine
- 336: Deprecate the Pack200 Tools and API
Nuevas características
Eliminación de módulos Java EE y CORBA
Se eliminan del JDK paquetes ya desaconsejados hace varias versiones anteriores y que no eran muy usados en cualquier caso. Estos paquetes son los de CORBA una forma de llamada a procedimientos remotos que se utilizó como alternativa a RMI pero que nunca tuvo un uso extendido prefiriéndose SOAP o más recientemente interfaces REST.
La lista de paquetes eliminados son los siguientes.
- java.xml.ws (JAX-WS, plus the related technologies SAAJ and Web Services Metadata)
- java.xml.bind (JAXB)
- java.activation (JAF)
- java.xml.ws.annotation (Common Annotations)
- java.corba (CORBA)
- java.transaction (JTA)
- java.se.ee (Aggregator module for the six modules above)
- jdk.xml.ws (Tools for JAX-WS)
- jdk.xml.bind (Tools for JAXB)
Sintaxis de variables locales para parámetros en lambdas
Ahora los parámetros de una lambda pueden declararse con var con inferencia de tipos. Esto proporciona uniformidad en el lenguaje al declarar los parámetros permite usar anotaciones en los parámetros de la función lambda como @NotNull.
Esta funcionalidad tiene algunas restricciones. No se puede mezclar el uso y no uso de var y no se puede mezclar el uso de var y tipos en lambdas explícitas. Son consideradas ilegales por el compilador y producirá un error en tiempo de compilación.
|
|
Cliente HTTP
En Java 9 se incorporó de forma experimental un cliente HTTP con soporte para HTTP/2 en el propio JDK. En Java 11 alcanza la categoría de estable. Este cliente HTTP es una forma sencilla de hacer llamadas a servicios web ya sean REST o GraphQL. Las clases del nuevo cliente se encuentran en el paquete java.net.http. Al estar este cliente HTTP incorporado en el JDK no será necesario depender de librerías de terceros.
Ejecución desde archivo de código fuente único
Para ejecutar un programa Java es necesario compilarlo a bytecode y posteriormente ejecutarlos. Se necesitan dos pasos. Para facilitar la ejecución de los programas que se componen de un único archivo de código fuente se añade la posibilidad de lanzar un programa desde el archivo de código fuente. Esto es útil par programas pequeños o para los casos de estar aprendiendo el lenguaje.
|
|
|
|
Esta funcionalidad es compatible con los shebang de los sistemas Unix.
|
|
|
|
Unicode 10
Tratar texto es una parte importante casi de cualquier aplicación, este soporte de Unicode 10 añade 16018 nuevos caracteres soportados, 128 nuevos emojis y 19 símbolos nuevos para el estándar en televisiones 4K.
TLS 1.3
Algunas de las versiones anteriores de TLS ya no se consideran seguras añadir soporte para la versión más reciente TLS 1.3 permite a las aplicaciones Java ser más compatibles y más seguras. El protocolo TLS 1.3 proporciona dos beneficios principalmente, es más seguro y más rápido que sus versiones anteriores.
Otras mejoras
Se añaden implementaciones específicas para la arquitectura Aarch64 para un mejor rendimiento en la plataforma ARM en algunas funciones. Se añade de forma experimental un nuevo recolector de basura ZGC con pausas para recolectar basura menores capaz de manejar cantidades de memoria pequeñas de megabytes y grandes de terabytes. Al mismo tiempo se añade un recolector de basura Epsilon que no reclama la memoria. Se añade soporte para los algoritmos criptográficos ChaCha20 y Poly1305 junto con otras funcionalidades criptográficas RSASSA-PSS, AES Encryption with HMAC-SHA2 for Kerberos 5, …
Se añaden varios métodos a la clase String muy utilizados con los que no será necesario recurrie a librerías de terceros. Estos métodos son repeat, isBlank, strip, stripLeading, stripTrailing, lines. En otras clases de la API también se han añadido nuevos métodos.
Java que tradicionalmente marcaba como deprecated características pero que las seguía manteniendo por compatibilidad hacia atrás parece que ha empezado a eliminar varias de esas características desaconsejadas de forma más agresiva. No solo se añaden nuevas características, también se eliminan algunas y se desaconseja el uso de otras entre ellas el visor de applets, eliminación de Unsafe.defineClass, Thread.destroy() y Thread.stop(Throwable), eliminación de las funcionalidades de despliegue de Java Plugin y Java Web Start que se marcaron como desaconsejadas en Java 9 y para eliminación en Java 10 finalmente en Java 11 se han eliminado sin reemplazo.
Oracle ya no ofrece el entorno de ejecución JRE ni versiones de 32 bits para Windows. JavaFX ya no está incluído en el JDK pero seguirá siendo utilizable como librería independiente.
Las anteriores son las funcionalidades que he considerado más destacables para todos los usuarios., También hay otras funcionalidades añadidas, soporte eliminado para funciones específicas o de funcionamiento interno.
- Introducing Java SE 11
- JDK 11 Release Notes
- Java 11 Documentation
- Java 11 Javadoc
- Introducing Java SE 11 (blog)
- Oracle JDK Releases for Java 11 and Later
- Java 11 Will Include More Than Just Features
- 90 New Features (and APIs) in JDK 11
- Java 11 String API Updates
- Java 11 removes EE and Corba packages
- Java Mission Control - Now serving OpenJDK binaries too!
- Oracle JDK 11 Migration Guide
- Countdown to Java Release Date