X

Entérate cómo la nube y las nuevas tecnologías habilitan la transformación en los negocios y en la sociedad

La llegada de Java 16

This is a syndicated post, view the original post here

Demostrando aún más la trayectoria de innovación continua de Java, Oracle se enorgullece de anunciar a Java 16, que representa la séptima versión de funciones, como parte de la cadencia de seis meses.

Por Sharat Chander*

El año 2020 fue un año memorable para Java, ya que celebró su 25º aniversario. Con más de dos décadas de innovación, Java ha seguido siendo:

•    Flexible, ya que se adapta al cambiante panorama tecnológico mientras permanece independiente de la plataforma.

•    Confiable al mantener la compatibilidad con versiones anteriores.

•    Con capacidad de acelerar la innovación sin poner en riesgo la seguridad.

Junto con la capacidad de Java de mejorar el desempeño, la estabilidad y la seguridad de la plataforma durante el recorrido, sigue siendo el lenguaje de programación más popular del mundo entre los desarrolladores. Según el último informe de IDC "Java cumple 25 años", más de nueve millones de desarrolladores, que representan el 69% de los desarrolladores a tiempo completo en todo el mundo, utilizan Java más que cualquier otro lenguaje.

-Lee más: Celebración de 25 años de Java

Demostrando aún más la trayectoria de innovación continua de Java, Oracle se enorgullece de anunciar a Java 16, que representa la séptima versión de funciones, como parte de la cadencia de seis meses. Este nivel de previsibilidad permite gestionar más fácilmente la adopción de innovaciones gracias a un flujo constante de cambios previstos.

¡Java 16 ya está disponible!
Oracle ofrece ahora Java 16 para desarrolladores y empresas.  Oracle JDK 16 recibirá un mínimo de dos actualizaciones trimestrales, según el cronograma de actualizaciones de parches críticos (CPU) de Oracle,, antes de ser seguido por Oracle JDK 17. Java 17 estará disponible de forma general en septiembre de 2021, pero ya se encuentran disponibles versiones de acceso anticipado en jdk.java.net.

Una vez más, Oracle presenta a Java 16 como la versión Oracle OpenJDK  bajo la Licencia Pública General GNU de código abierto v2, con la Excepción Classpath (GPLv2+CPE), y también bajo una licencia comercial para aquellos que utilicen la versión Oracle JDK como parte de un producto o servicio de Oracle, o para aquellos que deseen obtener soporte comercial.

Java 16

Al igual que en las versiones anteriores, seguimos celebrando las contribuciones realizadas por muchas personas y organizaciones de la Comunidad OpenJDK. ¡Todos construimos a Java juntos!

Ritmo constante de JDK 16
El ritmo general de cambio a lo largo del tiempo de JDK ha permanecido esencialmente constante por muchos años, pero con la frecuencia de seis meses del cronograma, el ritmo al que se entregan las innovaciones listas para la producción ha mejorado enormemente.

En vez de suministrar decenas de miles de correcciones y aproximadamente cien Propuestas de Mejora JDK (JEPs) en una gran versión a cada pocos años, las mejoras se entregan en versiones de recursos menores, en un cronograma más manejable y previsible, con frecuencia de seis meses. Estos cambios pueden variar de un recurso significativo a pequeñas mejoras para el mantenimiento rutinario, correcciones de errores y mejoras en la documentación. Cada cambio se representa en un único envío para un problema específico en elJDK Bug System.

De las 1897 cuestiones marcadas como corregidas en Java 16,1.397fueron concluidos por personas que trabajan para Oracle, mientras que 500 fueron aportadas por desarrolladores individuales o que trabajan para otras organizaciones. Analizar las cuestiones y agrupar los datos de la organización de los destinatarios resulta en el siguiente gráfico de organizaciones que patrocinan el desarrollo de correcciones en Java 16:

Oracle desea agradecer a los desarrolladores que trabajan para organizaciones como ARM, SAP, Red Hat y Tencent por sus notables contribuciones.  También agradecemos las contribuciones de organizaciones menores, como Ampere Computing, Bellsoft, DataDog, Microdoc y desarrolladores independientes, que contribuyeron colectivamente con el 3% de las correcciones en Java 16.

Estamos igualmente agradecidos a los numerosos desarrolladores que revisaron los cambios propuestos, a los primeros usuarios que probaron las versiones de acceso e informaron de los problemas, y a los profesionales que proporcionaron comentarios en las listas de correo de OpenJDK.

Las siguientes personas han realizado comentarios inestimables sobre la calidad de las compilaciones, han registrado errores de calidad o han ofrecido actualizaciones frecuentes:

•    Jaikiran Pai (Apache Ant)
•    Gary Gregory (Apache Commons)
•    Uwe Schindler (Apache Lucene)
•    Robert Scholte (Apache Maven)
•    Mark Thomas (Apache Tomcat)
•    Enrico Olivelli (Apache Zookeeper)
•    Rafale Winterhalter (Byte Buddy)
•    Peter Karich (Graph Hopper)
•    Evgeny Yavits (JaCoCo)
•    Marc Hoffman (JaCoCo)
•    Vincent Privat (JOSM)
•    Christain Stein (JUnit 5)
•    David Karnok (RxJava)

Además, a través del programa Quality Outreach, nos gustaría dar las gracias a los siguientes proyectos de software libres y código abierto y a las personas que han proporcionado excelentes comentarios al probar las versiones de acceso anticipado de Java 16 para ayudar a mejorar la calidad de la versión.

•    Apache Ant
•    Apache Derby (Rich Hillegas)
•    Apache Lucene
•    Apache Maven
•    Apache Tomcat
•    Apache Wicket (Martin Grigorov)
•    Apache ZooKeeper
•    Eclipse Collections (Nikhil Nanivadekar)
•    eo-yaml (Mihai Andronache)
•    FXGL (Almas Baimagambetov)
•    FXyz (Sean Phillips)
•    Java Katas (Chandra Guntur)
•    GraphHopper
•    Hibernate ORM
•    Hibernate Validator
•    Hibernate Search
•    Hibernate Reactive (Sanne Grinovero y Yoann Rodiere)
•    JobRunr (Ronald Dehuysser)
•    jOOQ (Lukas Eder)
•    MyBatis (Iwao Ave)
•    Micrometer (Tommy Ludwig)
•    RxJava
•    Sejda
•    PDFsam (Andrea Vacondio)

Novedades de Java 16
Además de miles de actualizaciones de desempeño, estabilidad y seguridad, Java 16 ofrecediecisiete mejoras/cambios principales (conocidos como Propuestas de mejora JDK - JEPs), incluyendo tres módulos de incubadora y una función de vista previa.

Algunas mejoras se presentan en los módulos de incubadoras, un medio de suministrar APIs y herramientas no finales a los desarrolladores, permitiendo que los usuarios realicen comentarios que pueden mejorar la calidad de la plataforma Java.

Del mismo modo, algunas mejoras se presentan comorecursos de vista previa, recursos del lenguaje o de la máquina virtual de la plataforma Java SE totalmente especificados e implementadas, pero que aún no son permanentes. Están disponibles en versiones del recurso JDK para recibir comentarios de desarrolladores basados en el uso real, permitiendo que se conviertan en permanentes en una futura versión.  Esto ofrece a los usuarios la oportunidad de proporcionar retroalimentación oportuna, y también brinda a los proveedores de herramientas la oportunidad de generar soporte para la funcionalidad antes de que la mayoría de los desarrolladores de Java las usen en un entorno de producción.

Los 17 JEPs que se ofrecen con Java 16 se han agrupado en seis categorías diferentes:

1. Nuevos recursos del lenguaje
JEP 394 Pattern Matching for instanceof

Presentado por primera vez como recurso de vista previa en Java 14 y nuevamente en Java 15, Pattern Matching mejora el lenguaje de programación Java con coincidencia de patrones para el operador instanceof.
Pattern matching permite expresar de forma más concisa y segura la lógica común de un programa, es decir, la extracción condicional de componentes de objetos.

JEP 395 Records
También presentado por primera vez como un recurso de vista previa en Java 14 y nuevamente en Java 15, Records ofrece una sintaxis compacta para declarar clases que son titulares transparentes para datos inmutables superficialmente. Esto reducirá significativamente la verbosidad de estas clases y mejorará la legibilidad y la mantenibilidad del código.

2. Mejoras de JVM
JEP 376 ZGC Concurrent Thread Processing

JEP 376 mueve el procesamiento del recolector de basura ZGC de los puntos de seguridad a una fase concurrente, permite pausas de submilisegundos dentro de los puntos de seguridad del GC, incluso en grandes montones. La eliminación de la última fuente de latencia en el recolector de basura ZGC mejorará en gran medida el desempeño y la eficiencia de las aplicaciones en esta versión y en las subsiguientes.

JEP 387 Elastic Metaspace
Esta función devuelve al sistema operativo la memoria de metadatos de clase (es decir, metaespacio) de VM de HotSpot no utilizada, reduciendo la presencia del metaespacio. Las aplicaciones con gran actividad de carga y descarga de clases pueden acumular mucho espacio no utilizado.

El nuevo esquema asigna la memoria del metaespacio en trozos más pequeños, reduce la sobrecarga de clases y la fragmentación. Mejora la elasticidad al devolver la memoria del metaespacio no utilizada al sistema operativo, lo que conduce a un mayor desempeño de la aplicación y disminuye la utilización de la memoria.

3. Nuevas herramientas y bibliotecas
JEP 380 Unix-Domain Socket Channels
Los sockets de dominio Unix han sido durante mucho tiempo una característica de la mayoría de las plataformas Unix, y ahora son compatibles con Windows 10 y Windows Server 2019. Esta función añade compatibilidad con sockets de dominio Unix (AF_UNIX) a las API de canales socket y a canales sockets de servidor en el paquete java.nio.channels.

Amplía el mecanismo de canal heredado para admitir canales socket de dominio Unix y canales socket de servidor. Los sockets de dominio UNIX se utilizan para la comunicación entre procesos (IPC) en el mismo host. Son similares a los sockets TCP/IP en la mayoría de los aspectos, excepto que se direccionan mediante nombres de ruta del sistema de archivos en lugar de direcciones de Protocolo de Internet (IP) y números de puerto. Para la comunicación local entre procesos, los sockets de dominio Unix son más seguros y eficientes que las conexiones de bucle TCP/IP.

JEP 392 Packaging Tool
Esta función se introdujo por primera vez como un módulo de incubadora en Java 14. Esta herramienta permite empaquetar aplicaciones Java autónomas. Admite formatos de empaquetado nativos para ofrecer a los usuarios finales una experiencia de instalación natural.

Estos formatos incluyen msi y exe en Windows, pkg y dmg en macOS, y deb y rpm en Linux. También permite especificar los parámetros de lanzamiento en el momento de empaquetar y se pueden invocar directamente, desde la línea de comandos o de forma programática, a través de la API ToolProvider. Ten en cuenta que el nombre del módulo jpackage cambia de jdk.incubator.jpackage a jdk.jpackage. Ello mejorará la experiencia del usuario final al instalar aplicaciones y simplificará las implementaciones mediante el modelo de “tienda de aplicaciones”.

4. Cómo preparar el trabajo para el futuro
JEP 390 Advertencias para clases value-based
Esta función designa las clases de envoltura primitivas (java.lang.Integer, java.lang.Double, etc.) como value-based (similares a java.util.Optional y java.time.LocalDateTime) y añaden forRemoval a sus constructores, que están obsoletos desde JDK 9, provocando nuevas advertencias.  Proporciona advertencias sobre intentos incorrectos de sincronizar instancias de cualquier clase value-based en la plataforma Java.

Muchos proyectos populares de código abierto ya han respondido a las advertencias de desaprobación de Java 9 eliminando las llamadas de constructores de envolturas de sus fuentes, y podemos esperar que muchos más lo hagan, dada la mayor urgencia de las advertencias de " desaprobado para su eliminación".

JEP 396 Encapsular fuertemente los internos de JDK de forma predeterminada
Esta función encapsula fuertemente todos los elementos internos del JDK de forma predeterminada, excepto las API internas críticas como sun.misc.Unsafe. Es posible que el código compilado con éxito con versiones anteriores que accede a API internas del JDK deje de funcionar de forma predeterminada. Este cambio pretende incentivar a los desarrolladores a migrar del uso de elementos internos a utilizar APIs estándar, para que tanto ellos como sus usuarios, puedan actualizarse sin problemas a futuras versiones de Java.

La encapsulación fuerte está controlada por la opción del lanzador --illegal-access, para JDK 9 hasta JDK 15 de forma predeterminada a warning, y a partir de JDK 16 de forma predeterminada a deny. Todavía es posible (por ahora) relajar la encapsulación de todos los paquetes con una sola opción de línea de comandos, en el futuro solo funcionará la apertura de paquetes específicos con –add-opens.

5. Funciones de incubación y vista previa
JEP 338 Vector API (Incubator)

Esta API de incubadora proporciona la iteración inicial de una API para expresar cálculos vectoriales que se compilan de forma confiable en tiempo de ejecución con excelentes instrucciones de hardware vectorial en arquitecturas de CPU compatibles y, por lo tanto, obtienen un rendimiento superior al de los cálculos escalares equivalentes. Permite aprovechar las instrucciones SIMD (Single Instruction Multiple Data) disponibles en la mayoría de las CPU modernas. Aunque HotSpot admite la autovectorización, el conjunto de operaciones escalares transformables es limitado y frágil a los cambios en el código. Esta API permitirá escribir fácilmente algoritmos vectoriales portátiles y de alto rendimiento en Java.

JEP 389 Foreign Linker API (Incubator)
Esta API ofrece acceso tipo estático, puramente Java, al código nativo. Simplificará considerablemente el proceso, de otro modo complicado y propenso a errores, de vinculación a una biblioteca nativa. Java ha admitido llamadas a métodos nativos a través de la interfaz nativa de Java (JNI) desde Java 1.1, pero es difícil y frágil. Los desarrolladores de Java deberían poder utilizar (en su mayoría) cualquier biblioteca nativa que se considere útil para una tarea en particular. También ofrece soporte para funciones foráneas sin la necesidad de ningún código de pegamento JNI interviniente.

JEP 393 Foreign Memory Access API (3rd Incubator)
Presentada por primera vez como una API incubadora en Java 14 y nuevamente en Java 15, esta API permite que los programas Java operen de forma segura y eficiente en varios tipos de memoria foránea (por ejemplo, memoria nativa, memoria persistente, memoria de montón administrada, etc.). También proporciona la base para la API Foreign Linker.

JEP 397 Clases selladas (2da vista previa)
Esta función de vista previa restringe qué otras clases o interfaces pueden extenderlas o implementarlas. Permite al autor de una clase o interfaz controlar qué código es responsable de implementarla. Además, proporciona una forma más declarativa que los modificadores de acceso de restringir el uso de una superclase. Y apoya las futuras direcciones en la concordancia de patrones al respaldar el análisis exhaustivo de los mismos.

6. Mejora de la productividad de desarrolladores de OpenJDK
El resto de los cambios no son directamente visibles para los desarrolladores de Java (aquellos que utilizan Java para codificar y ejecutar aplicaciones), sino solo para los desarrolladores de Java (aquellos que trabajan en OpenJDK).

JEP 347 Habilita las funciones del lenguaje C ++ 14 (en el código fuente de JDK)
Permite el uso de funciones de lenguaje C++14 en el código fuente JDK C++ y proporciona una guía específica sobre cuáles de esas funciones se pueden utilizar en el código HotSpot. A través de JDK 15, las funciones de lenguaje utilizadas por el código C++ en JDK se han limitado a los estándares del lenguaje C++98/03. Requiere actualizar la versión mínima aceptable de varios compiladores de plataformas.

JEP 357 Migrar de Mercurial a Git
JEP 369 Migrar a GitHub

Estos JEP migran los repositorios de código fuente de la Comunidad OpenJDK de Mercurial (hg) a Git y los alojan en GitHub en JDK 11 y posteriores. La migración incluye la actualización de herramientas como jcheck, webrev y defpath a Git. Git reduce el tamaño de los metadatos (alrededor de ¼ del tamaño) preservando el espacio del disco local y reduciendo el tiempo de clonación. Las herramientas modernas están mejor integradas con Git que con Mercurial. Los repositorios Git de OpenJDK ahora se encuentran en  https://github.com/openjdk

JEP 386 Alpine Linux Port
JEP 388 Windows/AArch64 Port

El objetivo de estos JEPs no es el esfuerzo de migración en sí mismo, sino su integración en el repositorio principal del JDK.

JEP 386 migra el JDK a Alpine Linux y otras distribuciones que utilizan musl como biblioteca C principal tanto en x64 como en AArch64. Además, JEP 388 migra el JDK a Windows AArch 64 (ARM64).

Soporte de herramientas
El soporte de herramientas actual ayuda a aumentar la productividad del desarrollador.  Con Java 16, seguimos abiertos a los esfuerzos de los principales proveedores de IDE, cuyas soluciones de herramientas ofrecen soporte a los desarrolladores para las versiones actuales de Java.  Los desarrolladores pueden contar con el soporte de Java 16 para los siguientes IDE:

•    JetBrains IDEA
•    Eclipse Marketplace

Java sigue siendo el lenguaje de programación favorito de los programadores de software.  Como la entrega puntual de mejoras en Java 16 lo demuestra, por medio de la planificación continua y fundamentada, y de la integración del ecosistema, la plataforma Java está bien posicionada para el desarrollo y el crecimiento modernos en la nube.

Mantente actualizado con las noticias y actualizaciones:

•    VisitaInside.Java (noticias y opiniones del equipo de Java en Oracle)

•    Acompaña lospodcast de Inside.Java (un programa para los desarrolladores de Java traído presentado por el personal de Java en Oracle. Hablaremos de lenguaje, la máquina virtual de Java, OpenJDK, la seguridad de la plataforma, de proyectos de innovación como Loom y Panamá, y mucho más).

•    Únete a Listas de correo de OpenJDK (el lugar para obtener más información sobre el progreso de tus proyectos favoritos de OpenJDK).

*Sharat Chander es Director de Gestión de Productos de JAVA SE

Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.