Java 16 llega dispuesto a reforzar la seguridad y el soporte de ARM
Oracle ha anunciado el lanzamiento de Java 16 (o más bien JDK 16), la última versión de la tecnología que ha dominado la computación durante buena parte del presente siglo y cuyo desarrollo se aceleró hace tiempo, por lo que ahora vemos cada año más de una nueva versión mayor del kit de desarrollo.
Desde la adopción de la actual cadencia de lanzamientos, cada nueva versión del JDK incluye una cantidad de novedades menor, aunque eso no quiere decir que la introducción o modificación de características importantes se haya detenido. JDK 16 ha incorporado 1.887 correcciones, de las cuales 1.397 proceden de personal de Oracle y 500 de desarrolladores individuales o personas que trabajan para otras organizaciones, de las que destaca Red Hat.
Java 16 incluye un total de 17 nuevas características, de las que intentaremos resaltar algunas de las más importantes. Mediante la Propuesta de Mejora de Java (JEP) 371 se ha permitido el uso de las características del lenguaje C++14 en el código fuente en C++ del JDK, ofreciendo además orientación sobre las características que se pueden usar en el código de HotSpot. Con la JEP 369 se han trasladado los repositorios comunitarios de OpenJDK a GitHub, algo que podría estar relacionado con la JEP 369, que abarcó la migración de Mercurial a Git como gestor de versiones.
Mediante la JEP 376 se ha movido en el recolector de basura ZGC el procesamiento de hilos de los puntos seguros a la fase concurrente para corregir un más que palpable cuello de botella, mientras que los canales de socket de dominio Unix (JEP 380), que han sido añadidos a las API de los canales de socket y servidor de socket del paquete ‘java.nio.channels’, se encargan de añadir soporte para todas las características de los sockets de dominio Unix que son comunes en las principales plataformas Unix y Windows.
Java 16 también se encarga de ampliar el número de plataformas soportadas al haberse portado el JDK a Alpine Linux (JEP 386) y otras distribuciones que usan ‘musl’ como biblioteca principal de C en las arquitecturas x86 y AArch64 (ARM64), además de abarcar oficialmente Windows para AArch64 (JEP 388) para posiblemente adelantarse a la revolución que podría llegar en un futuro debido a la aparición del Apple M1.
Otro aspecto interesante de JDK 16 es la introducción de un módulo de nivel “incubador” que se encarga de proporcionar la API Vector (JEP 338), la cual permite expresar los cálculos vectoriales que se generan en tiempo de ejecución para obtener instrucciones de hardware óptimas en el sistema en uso. Esta API es independiente de la plataforma y la arquitectura.
Por último destacamos el hecho de que se ha encapsulado fuertemente todos los elementos internos del JDK (JEP 396) excepto algunas API internas críticas como ‘as sun.misc.Unsafe’. La intención con este movimiento es la de reforzar la seguridad y el mantenimiento del JDK y animar a los desarrolladores para que cambien el uso de los componentes internos por las API estándares, facilitando de esta manera las actualizaciones hacia las futuras versiones de Java.
Java es un proyecto de licencia dual desde la aparición de la séptima versión mayor debido a que la versión comercial de Oracle empezó a basarse en OpenJDK. Esto quiere decir que no hay que preocuparse por el cambio de licencia que la compañía introdujo en Java 11, ya que OpenJDK se distribuye de forma gratuita empleando la licencia GPLv2. Mientras que la implementación software libre de Java es bastante conocida entre los usuarios de Linux y está presente en los repositorios de todas o casi todas las distribuciones, los que usan Windows o macOS posiblemente empezaron a conocerla a través de la iniciativa AdoptOpenJDK, que recibió un fuerte impulso tras el cambio de la licencia comercial en Java 11.
Todos los detalles sobre Java 16 pueden ser consultados a partir de la correspondiente página en la web de OpenJDK. La versión software libre del JDK puede ser obtenida desde el sitio web de Java (alternativamente y extraoficialmente desde AdoptOpenJDK, sobre todo para los usuarios de Windows y macOS) y la comercial desde la web de Oracle. Recomendamos recurrir a OpenJDK en caso de tener dudas sobre las restricciones de la versión comercial.