Lanzamiento de Java SE 16

Después de seis meses de desarrollo, Oracle lanzó la plataforma Java SE 16 (Java Platform, Standard Edition 16), cuya implementación de referencia utiliza el proyecto de código abierto OpenJDK. Java SE 16 mantiene la compatibilidad hacia atrás con versiones anteriores de la plataforma Java, de modo que todos los proyectos Java previamente escritos funcionarán sin cambios al ejecutarse en la nueva versión. Las compilaciones listas para instalar de Java SE 16 (JDK, JRE y Server JRE) están preparadas para Linux (x86_64, AArch64), Windows y macOS. La implementación de referencia de Java 16 desarrollada en el marco del proyecto OpenJDK se encuentra completamente abierta bajo la licencia GPLv2 con excepciones de GNU ClassPath, que permiten el enlace dinámico con productos comerciales.

Java SE 16 se clasifica como una versión con un ciclo de soporte regular, con actualizaciones que se lanzarán hasta la siguiente versión. Se debe utilizar Java SE 11 como una rama de soporte a largo plazo (LTS), con actualizaciones que se lanzarán hasta 2026. La próxima versión LTS está programada para septiembre de 2021. Cabe recordar que, desde el lanzamiento de Java 10, el proyecto ha cambiado a un nuevo proceso de desarrollo que implica ciclos más cortos para la formación de nuevas versiones. Ahora, la nueva funcionalidad se desarrolla en una rama maestra que se actualiza constantemente, donde se incluyen los cambios finales y de la cual se bifurcan ramas para estabilizar nuevas versiones cada seis meses.

En la preparación de la nueva versión, el desarrollo se trasladó del sistema de control de versiones Mercurial a Git y a la plataforma de desarrollo colaborativo GitHub. Se espera que esta migración mejore el rendimiento de las operaciones con el repositorio, aumente la eficiencia del almacenamiento, proporcione acceso a los cambios a lo largo de toda la historia del proyecto, mejore la revisión del código y utilice API para automatizar los flujos de trabajo. Además, el uso de Git y GitHub hace que el proyecto sea más atractivo para principiantes y desarrolladores familiarizados con Git.

Entre las novedades de Java 16 se pueden destacar:

  • Se ha añadido el módulo experimental jdk.incubator.vector con la implementación de la API Vector, que proporciona funciones para cálculos vectoriales, realizados utilizando instrucciones vectoriales de los procesadores x86_64 y AArch64, permitiendo aplicar operaciones simultáneamente a varios valores (SIMD). A diferencia de las capacidades de auto-vectorización de operaciones escalares en el compilador JIT HotSpot, la nueva API permite controlar explícitamente la vectorización para el procesamiento paralelo de datos.
  • En el código JDK y VM HotSpot, escrito en C++, se permite utilizar características introducidas en la especificación C++14. Anteriormente, solo se permitían los estándares C++98/03.
  • En el recolector de basura ZGC (Z Garbage Collector), que opera en modo pasivo y minimiza las interrupciones debidas a la recolección de basura siempre que sea posible, se ha añadido la capacidad de procesamiento paralelo de las pilas de hilos sin interrumpir la ejecución de los hilos de la aplicación. En ZGC, solo quedan las operaciones que requieren pausar el trabajo y que tienen interrupciones constantes, que por lo general no superan algunos cientos de microsegundos.
  • Se ha añadido soporte para sockets UNIX (AF_UNIX) en las clases SocketChannel, ServerSocketChannel y java.nio.channels.
  • Se ha implementado un puerto para la distribución de Linux Alpine con la biblioteca estándar en C musl, que es popular en entornos de contenedores, microservicios, sistemas en la nube y embebidos. El puerto propuesto en dichos entornos permite ejecutar programas en Java como aplicaciones convencionales. Además, mediante jlink se pueden eliminar todos los módulos no utilizados y formar un entorno mínimo suficiente para ejecutar la aplicación, lo que permite crear imágenes compactas específicas para aplicaciones particulares.
  • Se ha implementado el mecanismo Elastic Metaspace, que optimiza las operaciones de asignación y liberación de memoria ocupada por los metadatos de las clases (metaspace) en la JVM HotSpot. La utilización de Elastic Metaspace reduce la fragmentación de memoria, disminuye los gastos generales en el cargador de clases y mejora el rendimiento de las aplicaciones servidoras de larga duración gracias a una librea de memoria más rápida al sistema operativo para los metadatos de clases no utilizados. Para elegir el modo de liberación de memoria tras la descarga de clases, se ofrece la opción '-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)'.
  • Se ha añadido un puerto JDK para sistemas Windows que operan en hardware con procesadores basados en arquitectura AArch64.
  • Se ha propuesto una tercera versión preliminar de la API Foreign-Memory Access, que permite a las aplicaciones Java acceder de manera segura y eficiente a áreas de memoria fuera del montón de Java, manipulando nuevas abstracciones como MemorySegment, MemoryAddress y MemoryLayout.
  • Se ha implementado una API experimental Foreign Linker, que proporciona acceso desde Java al código nativo. Junto con la API Foreign-Memory, esta nueva interfaz de programación simplifica notablemente la creación de envolturas sobre bibliotecas compartidas comunes.
  • Se ha añadido la utilidad jpackage, que permite crear paquetes para aplicaciones Java autónomas (self-contained). La utilidad se basa en javapackager de JavaFX y permite formular paquetes en formatos nativos para diversas plataformas (msi y exe para Windows, pkg y dmg para macOS, deb y rpm para Linux). Los paquetes incluyen todas las dependencias necesarias.
  • Se ha habilitado por defecto la estricta encapsulación de todos los elementos internos del JDK, excepto para los API críticos, como sun.misc.Unsafe. El valor de la opción «—illegal-access» ahora está establecido por defecto en «deny» en lugar de «permit», lo que bloqueará los intentos de acceso a la mayoría de las clases, métodos y campos internos desde el código. Para eludir la restricción, se debe usar la opción «—illegal-access=permit».
  • Se ha estabilizado la implementación de coincidencia de patrones en el operador «instanceof», que permite definir inmediatamente una variable local para acceder al valor verificado. Por ejemplo, se puede escribir directamente «if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}» sin necesidad de definir explícitamente «String s = (String) obj». Antes: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Ahora se puede omitir la definición «Group group = (Group) obj»: if (obj instanceof Group group) { var entries = group.getEntries(); }
  • Se ha estabilizado la implementación de la palabra clave «record», que proporciona una forma compacta para definir clases, permitiendo evitar la definición explícita de varios métodos de bajo nivel, como equals(), hashCode() y toString(), en casos donde los datos solo se almacenan en campos cuyo comportamiento no cambia. Cuando se utilizan implementaciones típicas de los métodos equals(), hashCode() y toString() en la clase, se puede prescindir de su definición explícita: public record BankTransaction(LocalDate date, double amount, String description) {}

    Esta declaración llevará a la adición automática de las implementaciones de los métodos equals(), hashCode() y toString(), además del constructor y métodos que controlan la modificación de datos (getter).

  • Se propuso una segunda versión preliminar de clases e interfaces selladas («sealed») que no pueden ser utilizadas por otras clases e interfaces para herencia, extensión o anulación de implementación. Las clases selladas también ofrecen una forma más declarativa de restringir el uso de la superclase, en comparación con los modificadores de acceso, al basarse en un listado explícito de las subclases autorizadas para la extensión. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster