Después de seis meses de desarrollo, Oracle dio a conocer el lanzamiento de la nueva versión de Java SE 14. Esta plataforma se utiliza como una implementación de referencia OpenJDK de código abierto. Java SE 14 mantiene la compatibilidad con versiones anteriores de la plataforma Java; todos los proyectos Java previamente escritos funcionarán sin cambios cuando se inicien con la nueva versión.
Las compilaciones Java SE 14 listas para instalar (JDK, JRE y Server JRE) están preparadas para Linux (x86_64), Windows y macOS. La implementación de referencia Java 14 desarrollada por el proyecto OpenJDK está completamente abierta bajo la licencia GPLv2 con excepciones GNU ClassPath que permiten la vinculación dinámica a productos comerciales.
Principales novedades de Java SE 14
Esta nueva versión de Java SE 14 se clasifica como un período de soporte regular para el que se publicarán actualizaciones antes de la próxima versión ya que la actual rama estable LTS «Java SE 11», contara con actualizaciones hasta 2026, mientras que la rama anterior de Java 8 LTS será compatible hasta diciembre de 2020.
Dentro de las principales novedades de esta versión se menciona el soporte experimental de instanceof, record y soporte experimental para bloques de texto se ha ampliado.
- instanceof: es utilizado para la coincidencia de patrones en el operador que permite determinar de inmediato la variable local para acceder al valor verificado.
- record: proporciona una forma compacta para definir clases, evitando la definición explícita de varios métodos de bajo nivel, como equals(), hashCode() y toString(), en los casos en que los datos se almacenan solo en campos.
- La ampliación en los bloques de texto: proporciona una nueva forma de literales de cadena que permite incluir datos de texto de varias líneas en el código fuente sin usar caracteres de escape y preservar el formato de texto original en el bloque. El encuadre de bloque se realiza con tres comillas dobles.
En Java 14, los bloques de texto admiten la secuencia de escape «\s» para definir un espacio único y «\» para concatenar con la siguiente línea.
Tambien podremos encontrar que se implementó una versión preliminar de la utilidad jpackage, que permite crear paquetes para aplicaciones Java autónomas. La utilidad se basa en javapackager de JavaFX y permite crear paquetes en formatos nativos de varias plataformas (msi y exe para Windows, pkg y dmg para macOS, deb y rpm para Linux).
Por otro lado se menciona que se ha agregado un nuevo mecanismo de asignación de memoria al recolector de basura G1, teniendo en cuenta las características específicas de trabajar en sistemas grandes utilizando la arquitectura NUMA. El nuevo asignador de memoria se habilita utilizando el indicador «+ XX: + UseNUMA» y puede aumentar significativamente el rendimiento en los sistemas NUMA.
Se implementó una versión preliminar de la API de acceso a memoria externa, que permite a las aplicaciones Java acceder de manera segura y eficiente a áreas de memoria fuera del montón de Java mediante la manipulación de nuevas abstracciones de MemorySegment, MemoryAddress y MemoryLayout.
Los ports para los procesadores Solaris OS y SPARC se declaran obsoletos con la intención de eliminar estos en el futuro. La transferencia de estos ports a los obsoletos permitirá a la comunidad acelerar el desarrollo de nuevas funciones OpenJDK sin perder el tiempo manteniendo las funciones específicas de Solaris y SPARC.
Ademas se eliminó el recolector de basura CMS (Concurrent Mark Sweep), que fue obsoleto hace dos años y no se acompañó. Por otra parte, se declaró uso obsoleta de una combinación de algoritmos de recolección de basura y ParallelScavenge SerialOld.
De los demás cambios que se mencionan en el anuncio:
- Se eliminaron herramientas y API para comprimir archivos JAR utilizando el algoritmo Pack200.
- API agregada para rastrear eventos JFR sobre la marcha (JDK Flight Recorder), por ejemplo, para organizar el monitoreo continuo.
- Se ha agregado el módulo jdk.nio.mapmode, que ofrece nuevos modos (READ_ONLY_SYNC, WRITE_ONLY_SYNC) para crear buffers de bytes mapeados (MappedByteBuffer) que hacen referencia a la memoria no volátil (NVM).
Si quieres conocer más al respecto, puedes consultar el anuncio de esta nueva versión en el siguiente enlace.