Lansarea Java SE 14

După șase luni de dezvoltare, compania Oracle a lansat platforma Java SE 14 (Java Platform, Standard Edition 14), a cărei implementare de referință este proiectul deschis OpenJDK. Java SE 14 păstrează compatibilitatea înapoi cu versiunile anterioare ale platformei Java, toate proiectele Java scrise anterior vor funcționa fără modificări sub gestionarea noii versiuni. Versiunile gata de instalare ale Java SE 14 (JDK, JRE și Server JRE) sunt pregătite pentru Linux (x86_64), Windows și macOS. Implementarea de referință dezvoltată în cadrul proiectului OpenJDK Java 14 este complet deschisă sub licența GPLv2 cu excepții GNU ClassPath, care permit legarea dinamică cu produse comerciale.

Java SE 14 este clasificat ca un release cu suport obișnuit, actualizările pentru care sunt planificate până la următoarea lansare. Pentru un branch cu suport pe termen lung (LTS) ar trebui folosit Java SE 11, actualizările pentru care vor fi lansate până în 2026. Anteriora branch LTS Java 8 va fi susținută până în decembrie 2020. Următoarea lansare LTS este planificată pentru septembrie 2021. Reamintim că începând cu lansarea Java 10, proiectul a trecut la un nou proces de dezvoltare, care implică un ciclu mai scurt de formare a noilor lansări. Noile funcționalități sunt acum dezvoltate într-un branch principal constant actualizat, în care sunt incluse modificările deja finalizate și din care, o dată la șase luni, se ramifică branch-urile pentru stabilizarea noilor lansări.

Din inovații Java 14 poate remarc:

  • Suport experimental adăugat așocierea cu un model în operatorul „instanceof”, care permite imediat determinarea unei variabile locale pentru a accesa valoarea verificată. De exemplu, poate fi scris direct „if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” fără a defini explicit „String s = (String) obj”.

    A fost:

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

    Acum se poate renunța la definiția „Group group = (Group) obj”:

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

  • Suport experimental adăugat pentru noul cuvânt cheie "record“, oferind o formă compactă pentru definirea claselor, permițând evitarea definiției explicite a diverselor metode de nivel inferior, cum ar fi equals(), hashCode() și toString(), în cazurile în care datele sunt stocate doar în câmpuri, comportamentul acestora nefiind modificat. Atunci când în clasă sunt utilizate implementări tipice ale metodelor equals(), hashCode() și toString(), se poate renunța la definițiile lor explicite:

    public record BankTransaction(LocalDate date,
    double amount,
    String description) {}

    Această declarație va duce la adăugarea automată a implementărilor metodelor equals(), hashCode() și toString() în plus față de constructor și metodele care controlează modificarea datelor (getter).

  • Standardizat și inclusă implicit suportul pentru noua formă de expresii "switch", care nu necesită specificarea operatorului "break", permițând combinarea etichetelor repetate și permițând utilizarea atât ca operator, cât și ca expresie.

    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;
    }
    };

  • Suport experimental extins blocuri de text — noua formă de șiruri literale, care permit includerea de date text multiliniare în codul sursă fără utilizarea de escape pentru caractere și păstrând formatarea originală a textului în bloc. Cadrarea blocului se realizează prin trei ghilimele duble. În Java 14, în blocurile de text este implementat suportul pentru secvența de escape "\s" pentru a defini un singur spațiu și "\" pentru a îmbina cu linia următoare (ignorarea sfârșitului de linie, când este necesar să se afișeze un șir foarte lung). De exemplu, în loc de cod

    String html = "" +
    "\n\t" + "" +
    "\n\t\t" + "

    \"Java 14 is here!\"" +
    "\n\t" + "" +
    "\n" + "";

    poate fi specificat:

    String html = """
    <HTML>
    <BODY>

    »Java 14\
    este aici!"
    </BODY>
    """;

  • Informaționalitatea diagnosticului a fost extinsă în caz de excepții NullPointerException. Dacă anterior, mesajul de eroare făcea referire doar la numărul de linie, acum detaliază care metodă a provocat excepția. Diagnosticul extins este activat momentan doar la rularea cu opțiunea „-XX:+ShowCodeDetailsInExceptionMessages”. De exemplu, când se specifică această opțiune, excepția din linia

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

    va conduce la afișarea mesajului

    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)

    ce permite înțelegerea faptului că metoda Location.getCity() nu a fost apelată, iar User.getLocation() a returnat valoarea null.

  • Implementat o variantă preliminară a utilitarului jpackage, care permite crearea de pachete pentru aplicații Java independente (self-contained). Utilitarul se bazează pe javapackager din JavaFX și permite formarea de pachete în formatele native pentru diferite platforme (msi și exe pentru Windows, pkg și dmg pentru macOS, deb și rpm pentru Linux). Pachetele includ toate dependențele necesare.
  • În colectorul de gunoi G1 adăugat un nou mecanism de distribuție a memoriei, care ia în considerare specificitățile funcționării pe sisteme mari, care utilizează arhitectura NUMA. Noua distribuție a memoriei se activează cu ajutorul opțiunii „+XX:+UseNUMA” și permite creșterea semnificativă a performanței pe sistemele NUMA.
  • Adăugat API pentru monitorizarea în timp real a evenimentelor JFR (JDK Flight Recorder), de exemplu pentru organizarea unei monitorizări continue.
  • Adăugat modulul jdk.nio.mapmode, care oferă noi moduri (READ_ONLY_SYNC, WRITE_ONLY_SYNC) pentru crearea de buffer-e de octeți mapate (MappedByteBuffer), referindu-se la memoria non-volatilă (NVM).
  • Implementat varianta preliminară a API Foreign-Memory Access, care permite aplicațiilor Java să acceseze în siguranță și eficient zonele de memorie din afara heap-ului Java, manipulând noile abstracții MemorySegment, MemoryAddress și MemoryLayout.
  • Au fost declarate porturile pentru sistemele de operare Solaris și procesoarele SPARC (Solaris/SPARC, Solaris/x64 și Linux/SPARC) ca fiind depreciate cu intenția de a elimina aceste porturi în viitor. Trecerea acestor porturi în categoria celor depreciate va permite comunității să accelereze dezvoltarea de noi funcționalități OpenJDK, fără a pierde timpul cu menținerea particularităților specifice Solaris și SPARC.
  • Eliminat colectorul de gunoi CMS (Concurrent Mark Sweep), care acum doi ani a fost marcat ca deprecate și a rămas fără suport (înlocuit de mult timp de colectorul de gunoi G1). În plus, anunțat utilizarea învechită a combinației de algoritmi de colectare a gunoiului ParallelScavenge și SerialOld (pornire cu opțiunile „-XX:+UseParallelGC -XX:-UseParallelOldGC”).
  • A fost asigurată suportul experimental pentru colectorul de gunoi ZGC (Z Garbage Collector) pe platformele macOS și Windows (anterior era suportat doar pe Linux). ZGC funcționează în modul pasiv, minimizând întârzierile cauzate de colectarea de gunoi (timpul de oprire utilizând ZGC nu depășește 10 ms) și poate funcționa atât cu heap-uri mici, cât și cu heap-uri imense, cu dimensiuni de la câteva sute de megabytes până la multe terabytes.
  • Au fost eliminate unelte și API pentru comprimarea fișierelor JAR folosind algoritmul Pack200.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster