Versione di Java SE 14

Dopu à sei mesi di sviluppu, Oracle liberatu piattaforma JavaSE 14 (Java Platform, Standard Edition 14), u prughjettu open-source OpenJDK hè utilizatu cum'è implementazione di riferimentu. Java SE 14 mantene a cumpatibilità retrocede cù e versioni precedenti di a piattaforma Java tutti i prughjetti Java scritti prima funzionanu senza cambiamenti quandu eseguite sottu a nova versione. Build Java SE 14 pronte per l'installazione (JDK, JRE è Server JRE) preparatu per Linux (x86_64), Windows è macOS. Implementazione di riferimentu sviluppata da u prughjettu OpenJDK Java 14 hè cumplettamente open source sottu a licenza GPLv2, cù eccezzioni GNU ClassPath chì permettenu ligami dinamichi cù i prudutti cummerciale.

Java SE 14 hè classificatu cum'è una versione di supportu generale è continuarà à riceve l'aghjurnamenti finu à a prossima versione. A filiera di Support Long Term (LTS) deve esse Java SE 11, chì continuarà à riceve l'aghjurnamenti finu à u 2026. U ramu LTS precedente di Java 8 serà supportatu finu à dicembre 2020. A prossima versione LTS hè prevista per settembre 2021. Ricurdemu chì, cuminciendu cù a liberazione di Java 10, u prugettu hà cambiatu à un novu prucessu di sviluppu, chì implica un ciculu più curtu per a furmazione di novi versioni. A nova funziunalità hè issa sviluppata in un ramu maestru constantemente aghjurnatu, chì include cambiamenti pronti è da quali rami sò ramificati ogni sei mesi per stabilizzà e novi versioni.

Da innovazioni Java 14 pΓ² Marque:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° currispundenza di mudellu in l'operatore "instanceof", chΓ¬ permette di definisce immediatamente una variabile locale per accede Γ  u valore verificatu. Per esempiu, pudete scrive immediatamente "se (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" senza definisce esplicitamente "String s = (String) obj".

    Era:

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

    AvΓ  pudete fΓ  senza a definizione "Group group = (Group) obj":

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

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Β«discugrΓ fica", chΓ¬ furnisce una forma compacta per definisce e classi, chΓ¬ permette di evitΓ  di definisce esplicitamente diversi metudi di livellu bassu cum'Γ¨ equals (), hashCode () Γ¨ toString () in i casi induve i dati sΓ² almacenati solu in campi chΓ¬ u cumpurtamentu ΓΉn cambia micca. Quandu una classa usa implementazioni standard di i metudi equals(), hashCode() Γ¨ toString(), pΓ² fΓ  senza a so definizione esplicita:

    registru publicu BankTransaction (data LocalDate,
    quantitΓ  doppia
    String description) {}

    Questa dichjarazione aghjunghje automaticamente implementazioni di i metudi equals(), hashCode() Γ¨ toString() in piΓΉ di i metudi di custruttore Γ¨ getter.

  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½ΠΎΠ²ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Β«switchΒ», Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π΅ΠΉ указания ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Β«breakΒ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰Π΅ΠΉ использованиС Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Π½ΠΎ ΠΈ ΠΊΠ°ΠΊ выраТСния.

    var log = switch (event) {
    case PLAY -> Β«User has triggered the play buttonΒ»;
    case STOP, PAUSE -> Β«User needs a breakΒ»;
    default -> {
    String message = event.toString();
    LocalDateTime now = LocalDateTime.now();
    yield Β«Unknown event Β» + message +
    Β» logged on Β» + now;
    }
    };

  • Π Π°ΡΡˆΠΈΡ€Π΅Π½Π° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° blocchi di testu β€” Π½ΠΎΠ²ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² исходный ΠΊΠΎΠ΄ многострочныС тСкстовыС Π΄Π°Π½Π½Ρ‹Π΅ Π±Π΅Π· примСнСния Π² Π½ΠΈΡ… экранирования символов ΠΈ сохраняя исходноС форматирования тСкста Π² Π±Π»ΠΎΠΊΠ΅. ΠžΠ±Ρ€Π°ΠΌΠ»Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° осущСствляСтся трСмя Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ. Π’ Java 14 Π² тСкстовых Π±Π»ΠΎΠΊΠ°Ρ… Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Β«\sΒ» для опрСдСлСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π΅Π»Π° ΠΈ Β«\Β» для объСдинСния со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкой (игнорирования ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ вывСсти ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½ΡƒΡŽ строку). НапримСр, вмСсто ΠΊΠΎΠ΄Π°

    String html = " Β» +
    "\n\t" + " Β» +
    "\n\t\t" + " "Java 1 hè quì!" » +
    "\n\t" + " Β» +
    "\n" + " ";

    pudete specificΓ :

    String html = """


    Β»Java 1\
    hè quì!

    """;

  • Π Π°ΡΡˆΠΈΡ€Π΅Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ диагностики ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ NullPointerException. Если Ρ€Π°Π½ΡŒΡˆΠ΅ сообщСниС ΠΎΠ± ошибкС лишь ΡΡΡ‹Π»Π°Π»ΠΎΡΡŒ Π½Π° Π½ΠΎΠΌΠ΅Ρ€ строки, Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² Π½Ρ‘ΠΌ дСтализируСтся ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²Ρ‹Π·Π²Π°Π» ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ диагностика ΠΏΠΎΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ запускС с Ρ„Π»Π°Π³ΠΎΠΌ Β«-XX:+ShowCodeDetailsInExceptionMessagesΒ». НапримСр, ΠΏΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π»Π°Π³Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² строкС

    var name = user.getLocation().getCity().getName();

    ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ сообщСния

    Exception in thread Β«mainΒ» java.lang.NullPointerException: Cannot invoke Β«Location.getCity()Β»
    because the return value of Β«User.getLocation()Β» is null
    at NullPointerExample.main(NullPointerExample.java:5):5)

    ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Location.getCity() Π½Π΅ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½, Π° User.getLocation() Π²Π΅Ρ€Π½ΡƒΠ» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null.

  • Implementatu ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ jpackage, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ для самодостаточных (self-contained) Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° базируСтся Π½Π° javapackager ΠΈΠ· JavaFX ΠΈ позволяСт Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ…, Ρ€ΠΎΠ΄Π½Ρ‹Ρ… для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ (msi ΠΈ exe для Windows, pkg ΠΈ dmg для macOS, deb ΠΈ rpm для Linux). ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости.
  • Π’ сборщик мусора G1 aghjuntu Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ распрСдСлСния памяти, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ спСцифику Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… систСмах, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Numa. Новый Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ памяти Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„Π»Π°Π³Π° Β«+XX:+UseNUMAΒ» ΠΈ позволяСт сущСствСнно ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° NUMA-систСмах.
  • Aggiuntu API для отслСТивания Π½Π° Π»Π΅Ρ‚Ρƒ событий JFR (JDK Flight Recorder), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.
  • Aggiuntu ΠΌΠΎΠ΄ΡƒΠ»ΡŒ jdk.nio.mapmode, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰ΠΈΠΉ Π½ΠΎΠ²Ρ‹Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹ (READ_ONLY_SYNC, WRITE_ONLY_SYNC) для создания ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Ρ… Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² (MappedByteBuffer), ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° ΡΠ½Π΅Ρ€Π³ΠΎΠ½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ (NVM).
  • Implementatu ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ API Foreign-Memory Access, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Java-прилоТСниям бСзопасно ΠΈ эффСктивно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ областям памяти, Π²Π½Π΅ ΠΊΡƒΡ‡ΠΈ Java, манипулируя Π½ΠΎΠ²Ρ‹ΠΌΠΈ абстракциями MemorySegment, MemoryAddress ΠΈ MemoryLayout.
  • ΠžΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌΠΈ ΠΏΠΎΡ€Ρ‚Ρ‹ для ОБ Solaris ΠΈ процСссоров SPARC (Solaris/SPARC, Solaris/x64 ΠΈ Linux/SPARC) c Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ‹ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡ€Ρ‚ΠΎΠ² Π² разряд ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ сообщСству ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½ΠΎΠ²Ρ‹Ρ… возмоТностСй OpenJDK, Π½Π΅ тратя врСмя Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ особСнностСй, спСцифичных для Solaris ΠΈ SPARC.
  • Sguassatu сборщик мусора CMS (Concurrent Mark Sweep), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π²Π° Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄ Π±Ρ‹Π» ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ ΠΈ остался Π±Π΅Π· сопровоТдСния (Π½Π° смСну CMS Π΄Π°Π²Π½ΠΎ ΠΏΡ€ΠΈΡˆΡ‘Π» сборщик мусора G1). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, annunziatu ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сборки мусора ParallelScavenge ΠΈ SerialOld (запуск с опциями Β«-XX:+UseParallelGC -XX:-UseParallelOldGCΒ»).
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½Π° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сборщика мусора ZGC (Z Garbage Collector) Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… macOS ΠΈ Windows (Ρ€Π°Π½Π΅Π΅ поддСрТивался Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Linux). ZGC Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² пассивном Ρ€Π΅ΠΆΠΈΠΌΠ΅, насколько это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈΠ·-Π·Π° сборки мусора (врСмя остановки ΠΏΡ€ΠΈ использовании ZGC Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ 10 мс.) ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ с нСбольшими, Ρ‚Π°ΠΊ ΠΈ с ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌΠΈ ΠΊΡƒΡ‡Π°ΠΌΠΈ, Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сотСн ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚.
  • Sguassatu инструмСнтарий ΠΈ API для сТатия JAR-Ρ„Π°ΠΉΠ»ΠΎΠ² с использованиСм Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Pack200.

Source: opennet.ru

Add a comment