Izdanje Java SE 14

Nakon šest mjeseci razvoja, Oracle pušten platforma JavaSE 14 (Java Platforma, Standard Edition 14), open-source OpenJDK projekt koristi se kao referentna implementacija. Java SE 14 održava povratnu kompatibilnost s prethodnim izdanjima Java platforme; svi prethodno napisani Java projekti radit će bez promjena kada se pokrenu pod novom verzijom. Java SE 14 spremne za instalaciju (JDK, JRE i poslužitelj JRE) pripremljeni za Linux (x86_64), Windows i macOS. Referentna implementacija razvijena u okviru projekta OpenJDK Java 14 potpuno je otvorenog koda pod licencom GPLv2, s GNU ClassPath iznimkama koje dopuštaju dinamičko povezivanje s komercijalnim proizvodima.

Java SE 14 klasificirana je kao izdanje opće podrške i nastavit će primati ažuriranja do sljedećeg izdanja. Grana dugoročne podrške (LTS) trebala bi biti Java SE 11, koja će nastaviti primati ažuriranja do 2026. Prethodna LTS grana Jave 8 bit će podržana do prosinca 2020. Sljedeće LTS izdanje zakazano je za rujan 2021. Podsjetimo, počevši od izdanja Jave 10, projekt je prešao na novi razvojni proces, koji podrazumijeva kraći ciklus za formiranje novih izdanja. Nova funkcionalnost sada je razvijena u jednoj stalno ažuriranoj glavnoj grani, koja uključuje gotove promjene i iz koje se grane granaju svakih šest mjeseci kako bi se stabilizirala nova izdanja.

Od inovacije Java 14 može se oznaka:

  • Dodana eksperimentalna podrška slaganje uzoraka u operatoru “instanceof”, koji vam omogućuje da odmah definirate lokalnu varijablu za pristup provjerenoj vrijednosti. Na primjer, možete odmah napisati “if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” bez eksplicitnog definiranja “String s = (String) obj”.

    Bilo je:

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

    Sada možete bez definicije “Grupa grupa = (Grupa) obj”:

    if (obj instanceof grupa grupe) {
    var unosa = group.getEntries();
    }

  • Dodana eksperimentalna podrška za novu ključnu riječ "zapis", koji pruža kompaktni oblik za definiranje klasa, omogućujući vam da izbjegnete eksplicitno definiranje raznih metoda niske razine kao što su equals(), hashCode() i toString() u slučajevima kada se podaci pohranjuju samo u poljima čije se ponašanje ne mijenja. Kada klasa koristi standardne implementacije metoda equals(), hashCode() i toString(), može bez njihove eksplicitne definicije:

    javna evidencija bankovne transakcije (lokalni datum datum,
    dvostruki iznos
    Opis niza) {}

    Ova će deklaracija automatski dodati implementacije metoda equals(), hashCode() i toString() uz metode konstruktora i gettera.

  • Standardizirano i podrška za novi oblik "switch" izraza je omogućen prema zadanim postavkama, što ne zahtijeva navođenje operatora "break", omogućuje vam kombiniranje ponovljenih oznaka i može se koristiti ne samo u obliku operatora, već i kao izraz.

    var log = prekidač (događaj) {
    case PLAY -> “Korisnik je pokrenuo gumb za reprodukciju”;
    case STOP, PAUSE -> “Korisnik treba pauzu”;
    zadano -> {
    String poruka = ​​event.toString();
    LocalDateTime now = LocalDateTime.now();
    prinos "Nepoznati događaj" + poruka +
    » prijavljen » + sada;
    }
    };

  • Proširena eksperimentalna podrška blokovi teksta - novi oblik string literala koji vam omogućuje uključivanje tekstualnih podataka s više redaka u izvorni kod bez korištenja znakova za izbjegavanje znakova i očuvanja izvornog oblikovanja teksta u bloku. Blok je uokviren s tri dvostruka navodnika. U Javi 14 tekstualni blokovi sada podržavaju izlaznu sekvencu "\s" za definiranje jednog razmaka i "\" za spajanje sa sljedećim retkom (zanemarujući nove retke kada trebate ispisati vrlo dugačak red). Na primjer, umjesto šifre

    String html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 je ovdje!\" » +
    "\n\t" + " » +
    "\n" + " ";

    možete odrediti:

    String html = """


    »Java 1\
    je ovdje!

    """;

  • Proširen je informativni sadržaj dijagnostike kada se pojave iznimke NullPointerException. Dok se prije poruka o pogrešci odnosila samo na broj retka, sada se u njoj navodi koja je metoda uzrokovala iznimku. Napredna dijagnostika trenutno je omogućena samo kada se pokrene s oznakom “-XX:+ShowCodeDetailsInExceptionMessages”. Na primjer, kada se navodi ova zastavica, iznimka u retku

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

    rezultirat će porukom

    Iznimka u niti "main" java.lang.NullPointerException: Nije moguće pozvati "Location.getCity()"
    jer je povratna vrijednost "User.getLocation()" null
    na NullPointerExample.main(NullPointerExample.java:5):5)

    što jasno pokazuje da metoda Location.getCity() nije pozvana i da je User.getLocation() vratio null.

  • Provedeno Pregled uslužnog programa jpackage koji vam omogućuje stvaranje paketa za samostalne Java aplikacije. Uslužni program temelji se na javapackageru iz JavaFX-a i omogućuje vam stvaranje paketa u formatima izvornim za različite platforme (msi i exe za Windows, pkg i dmg za macOS, deb i rpm za Linux). Paketi uključuju sve potrebne ovisnosti.
  • G1 sakupljaču smeća dodano novi mehanizam dodjele memorije koji uzima u obzir specifičnosti rada na velikim sustavima koji koriste arhitekturu NUMA. Novi alokator memorije omogućen je korištenjem oznake “+XX:+UseNUMA” i može značajno poboljšati performanse na NUMA sustavima.
  • Dodano API za on-the-fly praćenje JFR (JDK Flight Recorder) događaja, na primjer za organiziranje kontinuiranog praćenja.
  • Dodano jdk.nio.mapmode modul, koji nudi nove načine rada (READ_ONLY_SYNC, WRITE_ONLY_SYNC) za stvaranje mapiranih međuspremnika bajtova (MappedByteBuffer) koji referenciraju trajnu memoriju (NVM).
  • Provedeno Pregled API-ja za pristup stranoj memoriji, koji Java aplikacijama omogućuje siguran i učinkovit pristup memorijskim regijama izvan Java gomile manipuliranjem novim apstrakcijama MemorySegment, MemoryAddress i MemoryLayout.
  • Najavljeno zastarjele priključke za Solaris OS i SPARC procesore (Solaris/SPARC, Solaris/x64 i Linux/SPARC) s namjerom uklanjanja ovih priključaka u budućnosti. Ukidanje ovih portova omogućit će zajednici da ubrza razvoj novih OpenJDK značajki bez gubljenja vremena na održavanje posebnih značajki Solarisa i SPARC-a.
  • Izbrisano skupljač smeća CMS (Concurrent Mark Sweep) koji je prije dvije godine označen kao zastario i ostao neodržavan (CMS je davno zamijenio sakupljač smeća G1). Osim, najavio zastarjela je upotreba kombinacije algoritama za skupljanje smeća ParallelScavenge i SerialOld (pokretanje s opcijama “-XX:+UseParallelGC -XX:-UseParallelOldGC”).
  • Eksperimentalna podrška za skupljač smeća ZGC (Z Garbage Collector) pružena je na platformama macOS i Windows (prethodno podržano samo na Linuxu). ZGC radi u pasivnom načinu rada, minimalizira latenciju zbog skupljanja smeća što je više moguće (vrijeme zaustavljanja pri korištenju ZGC-a ne prelazi 10 ms.) i može raditi s malim i velikim hrpama, veličine od nekoliko stotina megabajta do mnogo terabajta.
  • Uklonjeno Alati i API za komprimiranje JAR datoteka pomoću algoritma Pack200.

Izvor: opennet.ru

Dodajte komentar