Lanzamiento de Java SE 14

Después de seis meses de desarrollo, Oracle lanzado una plataforma JavaSE 14 (Java Platform, Standard Edition 14), el proyecto OpenJDK de código abierto se utiliza como implementación de referencia. Java SE 14 mantiene la compatibilidad con versiones anteriores de la plataforma Java; todos los proyectos Java escritos anteriormente funcionarán sin cambios cuando se lancen con la nueva versión. Compilaciones Java SE 14 listas para instalar (JDK, JRE y Server JRE) preparado para Linux (x86_64), Windows y macOS. Implementación de referencia desarrollada por el proyecto OpenJDK. Java 14 es completamente de código abierto bajo la licencia GPLv2, con excepciones GNU ClassPath que permiten enlaces dinámicos con productos comerciales.

Java SE 14 está clasificado como una versión de soporte general y seguirá recibiendo actualizaciones hasta la próxima versión. La rama de soporte a largo plazo (LTS) debería ser Java SE 11, que seguirá recibiendo actualizaciones hasta 2026. La rama LTS anterior de Java 8 será compatible hasta diciembre de 2020. El próximo lanzamiento de LTS está previsto para septiembre de 2021. Le recordamos que a partir del lanzamiento de Java 10, el proyecto pasó a un nuevo proceso de desarrollo, lo que implica un ciclo más corto para la formación de nuevas versiones. Ahora se desarrolla nueva funcionalidad en una rama maestra constantemente actualizada, que incluye cambios ya hechos y desde la cual las ramas se ramifican cada seis meses para estabilizar las nuevas versiones.

de innovaciones Java 14 uno puede marca:

  • Soporte experimental agregado la coincidencia de patrones en el operador "instanceof", que le permite definir inmediatamente una variable local para acceder al valor marcado. Por ejemplo, puede escribir inmediatamente "if (obj instancia de String s && s.length() > 5) {.. s.contains(..) ..}" sin definir explícitamente "String s = (String) obj".

    Fue

    si (obj instancia del grupo) {
    Grupo grupo = (Grupo)obj;
    var entradas = group.getEntries();
    }

    Ahora puedes prescindir de la definición “Grupo grupo = (Grupo) obj”:

    if (obj instancia del grupo grupo) {
    var entradas = group.getEntries();
    }

  • Se agregó soporte experimental para la nueva palabra clave "grabar", que proporciona una forma compacta para definir clases, lo que le permite evitar definir explícitamente varios métodos de bajo nivel como equals(), hashCode() y toString() en los casos en que los datos se almacenan solo en campos cuyo comportamiento no cambia. Cuando una clase utiliza implementaciones estándar de los métodos equals(), hashCode() y toString(), puede prescindir de su definición explícita:

    registro público BankTransaction (fecha LocalDate,
    doble cantidad
    Descripción de cadena) {}

    Esta declaración agregará automáticamente implementaciones de los métodos equals(), hashCode() y toString() además de los métodos constructor y getter.

  • Estandarizado y la compatibilidad con una nueva forma de expresiones de "cambio" está habilitada de forma predeterminada, que no requiere especificar el operador "interrupción", le permite combinar etiquetas repetidas y se puede usar no solo en forma de operador, sino también como un expresión.

    var log = cambiar (evento) {
    case PLAY -> “El usuario ha activado el botón de reproducción”;
    case STOP, PAUSE -> “El usuario necesita un descanso”;
    predeterminado -> {
    Mensaje de cadena = event.toString();
    LocalDateTime ahora = LocalDateTime.now();
    producir "Evento desconocido" + mensaje +
    » iniciado sesión » + ahora;
    }
    };

  • Soporte experimental ampliado bloques de texto - una nueva forma de cadenas literales que le permite incluir datos de texto de varias líneas en el código fuente sin utilizar caracteres de escape y conservando el formato de texto original en el bloque. El bloque está enmarcado por tres comillas dobles. En Java 14, los bloques de texto ahora admiten la secuencia de escape "\s" para definir un espacio único y "\" para concatenar con la siguiente línea (ignorando las nuevas líneas cuando necesita imprimir una línea muy larga). Por ejemplo, en lugar de código

    Cadena html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"¡Java 1 ya está aquí!\" » +
    "\n\t" + " » +
    "\n" + " ";

    puedes especificar:

    Cadena html = """


    »Java 1\
    ¡es aquí!

    """;

  • Se ha ampliado el contenido informativo del diagnóstico cuando se producen excepciones. Excepción de puntero nulo. Mientras que anteriormente el mensaje de error solo hacía referencia al número de línea, ahora detalla qué método causó la excepción. Actualmente, los diagnósticos avanzados solo están habilitados cuando se inician con el indicador “-XX:+ShowCodeDetailsInExceptionMessages”. Por ejemplo, al especificar este indicador, la excepción en la línea

    var nombre = usuario.getLocation().getCity().getName();

    resultará en un mensaje

    Excepción en el hilo "principal" java.lang.NullPointerException: no se puede invocar "Location.getCity()"
    porque el valor de retorno de "User.getLocation()" es nulo
    en NullPointerExample.main(NullPointerExample.java:5):5)

    lo que deja en claro que no se llamó al método Location.getCity() y User.getLocation() devolvió nulo.

  • Implementado Una vista previa de la utilidad jpackage, que le permite crear paquetes para aplicaciones Java independientes. La utilidad se basa en javapackager de JavaFX y le permite crear paquetes en formatos nativos de varias plataformas (msi y exe para Windows, pkg y dmg para macOS, deb y rpm para Linux). Los paquetes incluyen todas las dependencias necesarias.
  • Al recolector de basura G1 adicional un nuevo mecanismo de asignación de memoria que tiene en cuenta las características específicas de trabajar en sistemas grandes utilizando la arquitectura NUMA. El nuevo asignador de memoria se habilita mediante el indicador “+XX:+UseNUMA” y puede mejorar significativamente el rendimiento en los sistemas NUMA.
  • Добавлен API para el seguimiento sobre la marcha de eventos JFR (JDK Flight Recorder), por ejemplo para organizar un seguimiento continuo.
  • Добавлен Módulo jdk.nio.mapmode, que ofrece nuevos modos (READ_ONLY_SYNC, WRITE_ONLY_SYNC) para crear búferes de bytes mapeados (MappedByteBuffer) que hacen referencia a la memoria no volátil (NVM).
  • Implementado Una vista previa de la API de acceso a memoria externa, que permite a las aplicaciones Java acceder de forma segura y eficiente a regiones de memoria fuera del montón de Java mediante la manipulación de las nuevas abstracciones MemorySegment, MemoryAddress y MemoryLayout.
  • Anunciado puertos obsoletos para el sistema operativo Solaris y los procesadores SPARC (Solaris/SPARC, Solaris/x64 y Linux/SPARC) con la intención de eliminar estos puertos en el futuro. Dejar de usar estos puertos permitirá a la comunidad acelerar el desarrollo de nuevas características de OpenJDK sin perder tiempo manteniendo características específicas de Solaris y SPARC.
  • Remoto el recolector de basura CMS (Concurrent Mark Sweep), que fue marcado como obsoleto hace dos años y permaneció sin mantenimiento (CMS fue reemplazado hace mucho tiempo por el recolector de basura G1). Además, anunciado desaprobó el uso de una combinación de algoritmos de recolección de basura ParallelScavenge y SerialOld (ejecutar con las opciones “-XX:+UseParallelGC -XX:-UseParallelOldGC”).
  • Se ha proporcionado soporte experimental para el recolector de basura ZGC (Z Garbage Collector) en plataformas macOS y Windows (anteriormente solo compatible con Linux). ZGC opera en modo pasivo, minimiza al máximo la latencia debida a la recolección de basura (el tiempo de parada cuando se usa ZGC no excede los 10 ms) y puede trabajar con montones tanto pequeños como grandes, cuyo tamaño varía desde varios cientos de megabytes hasta muchos terabytes.
  • Eliminado Kit de herramientas y API para comprimir archivos JAR utilizando el algoritmo Pack200.

Fuente: opennet.ru

Añadir un comentario