JDK 10: Novedades de Java 10

JDK 10, una implementación de Java Standard Edition 10, se lanzó el 20 de marzo de 2018. Las mejoras clave incluyen tipos de variables locales, así como mejoras para la recolección y compilación de basura.

JDK 10 está programado para ser solo un lanzamiento a corto plazo, y las actualizaciones públicas para JDK 10 están programadas para finalizar en seis meses. El próximo JDK 11, que se publicará en septiembre, será una versión de soporte a largo plazo (LTS) de Java. Los lanzamientos de LTS vencen cada tres años.

Oracle ha establecido una cadencia de lanzamiento de seis meses para las versiones de Java. Había planes para nombrar esta actualización y sus sucesores según el año y el mes del lanzamiento, y el primer lanzamiento se llamaría Java 18.3. Pero esos planes fueron descartados después de que surgieron objeciones.

Dónde descargar Java JDK 10

Puede descargar JDK 10 desde el sitio web de Oracle.

Funciones nuevas y mejoradas en JDK 10

Las características clave de JDK 10 incluyen:

  • Inferencia de tipo de variable local, para mejorar el lenguaje Java para extender la inferencia de tipo a declaraciones de variables locales con inicializadores.
  • Recolección de basura completa en paralelo para el recolector de basura G1, para mejorar las latencias del peor de los casos.
  • Uso compartido de datos de clases de aplicaciones para optimizar el tiempo de inicio y la huella. La función de intercambio de datos de clase existente se amplía para que las clases de aplicación se puedan colocar en el archivo compartido.
  • Un compilador experimental justo a tiempo, Graal, se puede utilizar en la plataforma Linux / x64.
  • Conciencia de Docker. Cuando se ejecuta en sistemas Linux, la máquina virtual Java (JVM) sabrá si se está ejecutando en un contenedor Docker. La JVM extraerá la información específica del contenedor, la cantidad de CPU y la memoria total asignada al contenedor, en lugar de consultar el sistema operativo. (El número de CPU disponibles para el proceso de Java se calcula a partir de conjuntos, recursos compartidos o cuotas de procesadores especificados).
  • Tres nuevas opciones de JVM, para brindar a los usuarios de contenedores de Docker un mayor control sobre la memoria del sistema.
  • Se corrigió un error para corregir el mecanismo de conexión cuando se intenta adjuntar desde un proceso de host a un proceso de Java que se encuentra en un contenedor de Docker.
  • Tiempos de inicio más cortos para la herramienta jShell REPL, particularmente cuando se usa un archivo de inicio con muchos fragmentos.
  • Nuevas API para permitir mejor la creación de colecciones no modificables. El copyOf, Set.copyOfy Map.copyOfmétodos de crear nuevas instancias de recogida de instancias existentes. Los nuevos métodos toUnmodifiableList, toUnmodifiableSety toUnmodifiableMapse añadieron a la Collectorsclase del paquete Stream, permitiendo que los elementos de una corriente a ser recogidas en una colección de inmodificable.
  • Una inferencia de tipo de variable local, para mejorar el lenguaje y extender la inferencia de tipo a las variables locales. La intención es reducir la "ceremonia" asociada con la codificación mientras se mantiene un compromiso con la seguridad de tipo estático.
  • Una interfaz limpia del recolector de basura para mejorar el aislamiento del código fuente de diferentes recolectores de basura. Los objetivos de este esfuerzo incluyen una mejor modularidad para el código interno de recolección de basura en la máquina virtual HotSpot y facilitar la adición de un nuevo recolector de basura a HotSpot.
  • Recolección de basura completa en paralelo para el recolector de basura G1. La intención es mejorar las latencias del peor de los casos mediante la implementación del paralelismo.
  • Habilitar HotSpot para asignar el montón de objetos en un dispositivo de memoria alternativo, como un módulo de memoria NVDIMM, especificado por el usuario. Esta característica prevé que los sistemas futuros pueden tener arquitecturas de memoria heterogéneas.
  • Habilitar el compilador Just-In-Time basado en Java de Grall para su uso de forma experimental en la plataforma Linux / x64.
  • Consolidación de los repositorios del bosque JDK en un único repositorio, para agilizar el desarrollo. El código base hasta ahora se ha dividido en varios repositorios, lo que puede causar problemas con la gestión del código fuente.
  • Uso compartido de datos de clases de aplicaciones, para reducir la huella al compartir metadatos de clases comunes en todos los procesos. También se mejora el tiempo de inicio.
  • Apretones de manos locales de subprocesos, para ejecutar una devolución de llamada en subprocesos sin realizar un punto seguro global de VM. Los subprocesos individuales se pueden detener en lugar de todos los subprocesos o ningún subproceso.
  • Provisión de un conjunto predeterminado de certificados de autoridad de certificación raíz en el JDK. El objetivo es obtener certificados raíz de código abierto en el programa Java SE Root CA de Oracle para que las compilaciones de OpenJDK sean más atractivas para los desarrolladores.

La hoja de ruta de Java a largo plazo

Esto es lo que Oracle ha dicho que se está considerando para la próxima y posterior versión de Java SE:

  • The Amber Project, que ha sido una incubadora de características de lenguaje más pequeñas y orientadas a la productividad que incluyen inferencia de tipo de variable local, para disminuir la escritura de código Java asociada a la ceremonia; enumeraciones mejoradas, para mejorar la expresividad de la construcción enum al permitir variables de tipo en enumeraciones y realizar una verificación de tipo más precisa para las constantes de enumeración; y restos de lambda, para aumentar la usabilidad de lambda y referencias de métodos.
  • Proyecto Panamá, para interconectar la JVM y el código nativo, con llamadas a funciones nativas desde la JVM y acceso a datos nativos desde la JVM.
  • Valhalla, un proyecto de incubadora para Java VM avanzado y candidatos a funciones de lenguaje que incluyen tipos de valor y especialización genérica.
  • Project Loom, para reducir la complejidad al escribir aplicaciones concurrentes. El plan exige agregar implementaciones alternativas de subprocesos en modo de usuario, continuaciones delimitadas y otras construcciones que involucren la manipulación de la pila de llamadas. El objetivo principal de esta propuesta es ofrecer una implementación alternativa de subprocesos, administrada por programadores escritos en Java. El modelo de programación Java de subprocesos Java ordinarios se conservaría mientras se mejora el rendimiento y se reduce la huella.

Con el nuevo calendario de lanzamiento de seis meses, las funciones que faltan en un lanzamiento pueden retrasarse hasta seis meses, cuando salga el próximo lanzamiento. Más allá de lo que se ha anunciado para JDK 10, Oracle no se ha comprometido a cuándo estará disponible en Java alguna de las nuevas funciones propuestas.