JDK 14: las nuevas funciones de Java 14

Java Development Kit (JDK) 14 ha llegado a GA, con una versión de disponibilidad general para implementaciones de producción. La actualización a Java estándar incluye nuevas capacidades como la transmisión de eventos de JDK Flight Recorder, la coincidencia de patrones y las expresiones de cambio. 

JDK 14 es una versión de características de Java, en lugar de una versión de soporte a largo plazo (LTS), siguiendo la cadencia de lanzamiento de seis meses establecida para Java. JDK 14 recibirá actualizaciones de seguridad en abril y julio antes de ser reemplazado por JDK 15, también una versión no LTS, que vence en septiembre. La versión actual de LTS es JDK 11. 

Las nuevas características y mejoras en JDK 14 incluyen:

  • JFR Event Streaming proporciona una API para el consumo continuo de datos JFR de aplicaciones en proceso y fuera de proceso. JFR es una herramienta para recopilar datos de diagnóstico y generación de perfiles sobre una aplicación Java y la JVM mientras se ejecutan. La propuesta de transmisión de eventos registra el mismo conjunto de eventos que para el caso sin transmisión, con una sobrecarga de menos del uno por ciento si es posible. La transmisión de eventos debe coexistir con las grabaciones que no son de transmisión, tanto en disco como en memoria. Motivando esta propuesta es una situación en la que HotSpot VM emite más de 500 puntos de datos usando JFR, la mayoría de ellos disponibles solo mediante el análisis de archivos de registro. Actualmente, un usuario debe iniciar una grabación, detenerla, volcar el contenido en el disco y luego analizar el archivo de grabación. Esto funciona bien para la creación de perfiles de aplicaciones, pero no para fines de supervisión.Un ejemplo de uso de monitoreo es un tablero que muestra actualizaciones dinámicas de datos. La creación de una grabación conlleva una sobrecarga, como copiar datos del depósito del disco a un archivo de grabación independiente. Si hubiera una forma de leer los datos que se están grabando desde el repositorio del disco sin crear un nuevo archivo de grabación, se podría evitar gran parte de la sobrecarga.
  • La mejora planificada se  NullPointerExceptionsrefiere a mejorar la usabilidad de las excepciones generadas por la JVM al describir exactamente qué variable era nula. Los autores de la propuesta buscan proporcionar información útil a los desarrolladores y al personal de soporte sobre la terminación prematura de un programa y mejorar la comprensión del programa al asociar más claramente una excepción dinámica con el código del programa estático. Uno de los objetivos es reducir la confusión y la preocupación que tienen los desarrolladores NullPointerExceptions.
  • Los búferes de bytes asignados no volátiles agregarían nuevos modos de asignación de archivos específicos de JDK que permiten que la API FileChannel se use para crear MappedByteBufferinstancias que se refieran a la memoria no volátil (NVM). NVM permite a los programadores crear y actualizar el estado del programa a través de las ejecuciones del programa sin incurrir en los costos significativos de copia o traducción que generalmente requieren las operaciones de entrada y salida. Esto es particularmente significativo para los programas transaccionales. Por lo tanto, el objetivo principal de esta propuesta de mejora de JDK es garantizar que los clientes puedan acceder y actualizar NVM desde un programa Java de manera coherente y eficiente. Un objetivo secundario es implementar este comportamiento de confirmación utilizando una API interna de JDK restringida definida en la clase Unsafe, para que pueda ser reutilizada por clases distintas deMappedByteBufferque puede necesitar comprometerse con NVM. Otro objetivo es permitir que las API existentes rastreen los búferes asignados a través de NVM para su supervisión y administración. Las plataformas de CPU / SO de destino incluyen Linux / x64 y Linux / AArch64.
  • Las expresiones de cambio simplifican la codificación extendiéndolas  switchpara que se puedan usar como una declaración o una expresión. Se espera que las expresiones de cambio sean una característica permanente en JDK 14, después de haber sido vista previamente tanto en JDK 12 como en JDK 13. Las expresiones de cambio también se preparan para el uso de coincidencia de patrones en switch. La coincidencia de patrones permite a los desarrolladores extraer condicionalmente componentes de objetos de forma más concisa y segura. 
  • Asignación de memoria compatible con NUMA para el recolector de basura G1, destinada a mejorar el rendimiento de G1 en máquinas grandes. 
  • Eliminación del recolector de basura Concurrent Mark Sweep (CMS), que anteriormente estaba en desuso y estaba programado para su eliminación. Han surgido sucesores de CMS, incluidos ZGC y Shenandoah. 
  • Portabilidad de ZGC a MacOS. Hasta ahora, solo ha sido compatible con Linux.
  • Eliminación de las herramientas pack200 y unpack200 y la API Pack200 en el java.util.jarpaquete. Todos estos fueron obsoletos en Java SE 11 con la intención de eliminarlos en el futuro. Pack200 es un esquema de compresión para archivos JAR.
  • Registros, que proporcionarían una sintaxis compacta para declarar clases que son titulares transparentes de datos poco inmutables. Los registros facilitan la creación de clases que son esencialmente portadores de datos sin tener que escribir mucho texto repetitivo. La propuesta establece que debería ser fácil y conciso declarar agregados de datos nominales superficialmente inmutables y de buen comportamiento.
  • Una herramienta de empaquetado, en una fase de desarrollo incubadora, para empaquetar aplicaciones Java autónomas. La herramienta estaría basada en JavaFX javapackager. Esta herramienta se había incluido en Java, pero se eliminó de JDK 11 como parte de la eliminación de JavaFX.
  • Mejore el idioma con la coincidencia de patrones para el instanceof operador. Esta sería una función de vista previa en JDK 14. La coincidencia de patrones permite que la lógica común en un programa, principalmente la extracción condicional de componentes de objetos, se exprese de manera más concisa y segura. El código puede ser breve y seguro.
  • Una segunda vista previa de bloques de texto, un literal de cadena de varias líneas que evita la necesidad de la mayoría de las secuencias de escape y formatea automáticamente la cadena de una manera predecible. Los bloques de texto darían al desarrollador control sobre el formato cuando lo desee, simplificarían la escritura de programas Java y mejorarían la legibilidad de las cadenas. Los bloques de texto se previsualizaron en JDK 13; la iteración JDK 14 agregaría secuencias de escape para administrar espacios en blanco explícitos y control de nueva línea.
  • Desaprovechando la combinación de los algoritmos de recolección de basura Parallel Scavenge y Serial Old. Los mantenedores de Java creen que esta combinación se usa muy poco pero requiere mucho mantenimiento.
  • Portar el ZGC (Z Garbage Collector) a Windows. Esta función se ha trasladado una vez más a la lista de objetivos oficiales, después de haber sido revertida a la lista de objetivos propuestos.
  • API de acceso a memoria externa, con la introducción de una API para programas Java para acceder de manera segura y eficiente a la memoria externa fuera del montón de Java. Esta API debería servir como una alternativa a las principales vías por las que los programas Java acceden a la memoria, incluidos nio.ByteBuffery sun.misc.Unsafe. La nueva API debería poder operar en varios tipos de memoria, incluida la memoria nativa, persistente y el montón administrado. No debería ser posible que la API socave la seguridad de la JVM. La desasignación de memoria debe ser explícita en el código fuente. Se espera que la API ayude en el desarrollo del soporte de interoperación nativo que es el objetivo del Proyecto Panamá.
  • Desactivación de los puertos Solaris / Sparc, Solaris / x64 y Linux / Sparc, con la intención de eliminarlos en una versión futura. Dejar de admitir estos puertos permitirá a los colaboradores de OpenJDK acelerar el desarrollo de nuevas funciones. Aunque Solaris y Sparc fueron tecnologías clave en Sun Microsystems, el creador original de Java, en los últimos años han sido reemplazadas en el espacio tecnológico por el sistema operativo Linux y los procesadores Intel.

Dónde descargar JDK 14

Puede descargar JDK 14 de código abierto desde jdk.java.net para Linux, Windows y macOS. Puede descargar las descargas comerciales de Oracle Java SE 14 desde Oracle.com.