Versión de Java SE 14

Despois de seis meses de desenvolvemento, Oracle liberado plataforma JavaSE 14 (Java Platform, Standard Edition 14), o proxecto OpenJDK de código aberto úsase como implementación de referencia. Java SE 14 mantén a compatibilidade con versións anteriores da plataforma Java; todos os proxectos Java escritos anteriormente funcionarán sen cambios cando se executen baixo a nova versión. Compilacións Java SE 14 listas para instalar (JDK, JRE e Server JRE) preparado para Linux (x86_64), Windows e macOS. Implementación de referencia desenvolvida polo proxecto OpenJDK Java 14 é de código aberto totalmente baixo a licenza GPLv2, con excepcións de GNU ClassPath que permiten conexións dinámicas con produtos comerciais.

Java SE 14 está clasificado como versión de soporte xeral e seguirá recibindo actualizacións ata a próxima versión. A rama de Soporte a longo prazo (LTS) debería ser Java SE 11, que seguirá recibindo actualizacións ata 2026. A anterior rama LTS de Java 8 será compatible ata decembro de 2020. O próximo lanzamento de LTS está programado para setembro de 2021. Lembrámosvos que a partir do lanzamento de Java 10, o proxecto pasou a un novo proceso de desenvolvemento, o que implica un ciclo máis curto para a formación de novos lanzamentos. Agora desenvólvese unha nova funcionalidade nunha rama mestra que se actualiza constantemente, que inclúe cambios xa feitos e da que se ramifican cada seis meses para estabilizar as novas versións.

De innovacións Java 14 unha lata marca:

  • Engadido soporte experimental coincidencia de patróns no operador "instanceof", que permite definir inmediatamente unha variable local para acceder ao valor marcado. Por exemplo, pode escribir inmediatamente "se (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" sen definir explícitamente "String s = (String) obj".

    Foi:

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

    Agora podes prescindir da definición "Group group = (Group) obj":

    if (obj instanceof Group Group) {
    entradas var = group.getEntries();
    }

  • Engadiuse soporte experimental para a nova palabra clave "rexistro", que proporciona unha forma compacta para definir clases, o que lle permite evitar definir explícitamente varios métodos de baixo nivel como equals(), hashCode() e toString() nos casos en que os datos se almacenan só en campos cuxo comportamento non cambia. Cando unha clase usa implementacións estándar dos métodos equals(), hashCode() e toString(), pode prescindir da súa definición explícita:

    rexistro público Transacción bancaria (data LocalDate,
    dobre cantidade
    Descrición da cadea) {}

    Esta declaración engadirá automaticamente implementacións dos métodos equals(), hashCode() e toString() ademais dos métodos construtor e getter.

  • Normalizado e o soporte para unha nova forma de expresións "cambiar" está habilitado de forma predeterminada, que non require especificar o operador de "interrupción", permítelle combinar etiquetas repetidas e pódese usar non só en forma de operador, senón tamén como operador. expresión.

    var log = cambiar (evento) {
    case PLAY -> "O usuario activou o botón de reprodución";
    caso STOP, PAUSE -> "O usuario necesita un descanso";
    predeterminado -> {
    String message = event.toString();
    LocalDateTime agora = LocalDateTime.now();
    produce "Evento descoñecido" + mensaxe +
    » iniciado sesión » + agora;
    }
    };

  • Soporte experimental ampliado bloques de texto — unha nova forma de literais de cadea que lle permite incluír datos de texto de varias liñas no código fonte sen usar escape de caracteres e conservando o formato orixinal do texto no bloque. O bloque está enmarcado por tres comiñas dobres. En Java 14, os bloques de texto agora admiten a secuencia de escape "\s" para definir un único espazo e "\" para concatenar coa seguinte liña (ignorando as novas liñas cando precisa imprimir unha liña moi longa). Por exemplo, no canto de código

    String html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 xa está aquí\" » +
    "\n\t" + " » +
    "\n" + " ";

    podes especificar:

    String html = """


    »Java 1\
    é aquí!

    """;

  • Ampliouse o contido informativo dos diagnósticos cando se producen excepcións NullPointerException. Mentres que antes a mensaxe de erro só se refería ao número de liña, agora detalla cal é o método que provocou a excepción. Actualmente, os diagnósticos avanzados só están habilitados cando se inician coa marca "-XX:+ShowCodeDetailsInExceptionMessages". Por exemplo, ao especificar esta marca, a excepción na liña

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

    dará lugar a unha mensaxe

    Excepción no fío "main" java.lang.NullPointerException: non se pode invocar "Location.getCity()"
    porque o valor de retorno de "User.getLocation()" é nulo
    en NullPointerExample.main(NullPointerExample.java:5):5)

    o que deixa claro que o método Location.getCity() non foi chamado e User.getLocation() devolveu nulo.

  • Implementado Unha vista previa da utilidade jpackage, que lle permite crear paquetes para aplicacións Java autónomas. A utilidade baséase en javapackager de JavaFX e permite crear paquetes en formatos propios de varias plataformas (msi e exe para Windows, pkg e dmg para macOS, deb e rpm para Linux). Os paquetes inclúen todas as dependencias necesarias.
  • Ao lixo G1 engadido un novo mecanismo de asignación de memoria que ten en conta as particularidades de traballar en grandes sistemas usando a arquitectura EN. O novo asignador de memoria está habilitado mediante a marca "+XX:+UseNUMA" e pode mellorar significativamente o rendemento nos sistemas NUMA.
  • Engadido API para a monitorización en tempo real de eventos JFR (JDK Flight Recorder), por exemplo para organizar un seguimento continuo.
  • Engadido jdk.nio.mapmode, que ofrece novos modos (READ_ONLY_SYNC, WRITE_ONLY_SYNC) para crear búferes de bytes mapeados (MappedByteBuffer) facendo referencia á memoria non volátil (NVM).
  • Implementado Unha vista previa da API de acceso á memoria estranxeira, que permite ás aplicacións Java acceder de forma segura e eficiente a rexións de memoria fóra do montón de Java manipulando as novas abstraccións MemorySegment, MemoryAddress e MemoryLayout.
  • Anunciado portos obsoletos para os procesadores Solaris OS e SPARC (Solaris/SPARC, Solaris/x64 e Linux/SPARC) coa intención de eliminar estes portos no futuro. O abandono destes portos permitirá á comunidade acelerar o desenvolvemento de novas funcións OpenJDK sen perder tempo en manter as funcións específicas de Solaris e SPARC.
  • Eliminado o colector de lixo CMS (Concurrent Mark Sweep), que foi marcado como obsoleto hai dous anos e permaneceu sen mantemento (CMS foi substituído hai moito tempo polo colector de lixo G1). Ademais, anunciou desaprobou o uso dunha combinación de algoritmos de recollida de lixo ParallelScavenge e SerialOld (execútase coas opcións "-XX:+UseParallelGC -XX:-UseParallelOldGC").
  • Proporcionouse soporte experimental para o colector de lixo ZGC (Z Garbage Collector) en plataformas macOS e Windows (anteriormente só admitía Linux). ZGC funciona en modo pasivo, minimiza a latencia debido á recollida de lixo na medida do posible (o tempo de parada cando se usa ZGC non supera os 10 ms.) e pode funcionar tanto con montóns pequenos como enormes, que van desde varios centos de megabytes ata moitos terabytes.
  • Eliminado Toolkit e API para comprimir ficheiros JAR usando o algoritmo Pack200.

Fonte: opennet.ru

Engadir un comentario