Java SE 14 izdanje

Nakon šest mjeseci razvoja, Oracle pušten platforma JavaSE 14 (Java platforma, Standardno izdanje 14), OpenJDK projekat otvorenog koda se koristi kao referentna implementacija. Java SE 14 održava kompatibilnost unatrag sa prethodnim izdanjima Java platforme; svi prethodno napisani Java projekti će raditi bez promjena kada se pokrenu pod novom verzijom. Java SE 14 verzije spremne za instalaciju (JDK, JRE i Server JRE) pripremljeno za Linux (x86_64), Windows i macOS. Referentna implementacija razvijena od strane OpenJDK projekta Java 14 je potpuno otvorenog koda pod GPLv2 licencom, sa GNU ClassPath izuzecima koji dozvoljavaju dinamičko povezivanje sa komercijalnim proizvodima.

Java SE 14 je klasificirana kao izdanje za opću podršku i nastavit će primati ažuriranja do sljedećeg izdanja. Ogranak za dugoročnu podršku (LTS) bi trebao biti Java SE 11, koji će nastaviti primati ažuriranja do 2026. godine. Prethodna LTS grana Jave 8 će biti podržana do decembra 2020. Sljedeće izdanje LTS-a zakazano je za septembar 2021. Podsjetimo, počevši od izdavanja Jave 10, projekat je prešao na novi razvojni proces, što podrazumijeva kraći ciklus za formiranje novih izdanja. Nova funkcionalnost je sada 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ći oznaka:

  • Dodata eksperimentalna podrška podudaranje uzoraka u operatoru “instanceof”, koji vam omogućava 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) {
    Grupna grupa = (Grupa)obj;
    var entries = group.getEntries();
    }

    Sada možete bez definicije "Grupa grupe = (Grupa) obj":

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

  • Dodata eksperimentalna podrška za novu ključnu riječ "rekord", koji pruža kompaktnu formu za definiranje klasa koja eliminira potrebu za eksplicitnim definiranjem različitih metoda niskog nivoa, kao što su equals(), hashCode() i toString(), u slučajevima kada se podaci pohranjuju samo u poljima čije ponašanje ne odgovara ne mijenjati. Kada klasa koristi standardne implementacije metoda equals(), hashCode() i toString(), može bez njihove eksplicitne definicije:

    javni zapis Bankarska transakcija (lokalni datum datum,
    dupli iznos
    Opis niza) {}

    Ova deklaracija će automatski dodati implementacije metoda equals(), hashCode() i toString() pored metoda konstruktora i getter.

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

    var log = prekidač (događaj) {
    slučaj PLAY -> “Korisnik je aktivirao dugme za reprodukciju”;
    slučaj STOP, PAUSE -> “Korisniku je potrebna pauza”;
    zadano -> {
    String poruka = ​​event.toString();
    LocalDateTime now = LocalDateTime.now();
    yield "Nepoznati događaj" + poruka +
    » prijavljen » + sada;
    }
    };

  • Proširena eksperimentalna podrška tekstualni blokovi - novi oblik string literala koji vam omogućava da uključite tekstualne podatke u više redova u izvorni kod bez korištenja izbjegavanja znakova i očuvanja originalnog oblikovanja teksta u bloku. Blok je uokviren sa tri dvostruka navodnika. U Javi 14, tekstualni blokovi sada podržavaju escape sekvencu "\s" za definiranje jednog razmaka i "\" za spajanje sa sljedećim redom (ignorirajući nove redove kada trebate ispisati vrlo dug red). Na primjer, umjesto koda

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

    možete odrediti:

    String html = """


    »Java 1\
    je ovdje!

    """;

  • Informativni sadržaj dijagnostike kada se pojave izuzeci je proširen NullPointerException. Dok se ranije poruka o grešci odnosila samo na broj reda, sada opisuje koja metoda je uzrokovala iznimku. Napredna dijagnostika je trenutno omogućena samo kada se pokrene sa zastavicom “-XX:+ShowCodeDetailsInExceptionMessages”. Na primjer, kada specificirate ovu zastavicu, izuzetak u retku

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

    rezultirat će porukom

    Izuzetak u niti "main" java.lang.NullPointerException: Ne mogu pozvati "Location.getCity()"
    jer je povratna vrijednost "User.getLocation()" nula
    na NullPointerExample.main(NullPointerExample.java:5):5)

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

  • Implementirano Pregled uslužnog programa jpackage, koji vam omogućava da kreirate pakete za samostalne Java aplikacije. Uslužni program je baziran na javapackager-u iz JavaFX-a i omogućava vam da kreirate pakete u formatima koji su izvorni za različite platforme (msi i exe za Windows, pkg i dmg za macOS, deb i rpm za Linux). Paketi uključuju sve potrebne zavisnosti.
  • Do G1 sakupljača smeća dodano novi mehanizam dodjele memorije koji uzima u obzir specifičnosti rada na velikim sistemima koji koriste arhitekturu NUMA. Novi alokator memorije je omogućen pomoću oznake “+XX:+UseNUMA” i može značajno poboljšati performanse na NUMA sistemima.
  • Dodano API za praćenje događaja JFR (JDK Flight Recorder) u hodu, na primjer za organiziranje kontinuiranog praćenja.
  • Dodano jdk.nio.mapmode modul, koji nudi nove modove (READ_ONLY_SYNC, WRITE_ONLY_SYNC) za kreiranje mapiranih bajtova bafera (MappedByteBuffer) koji upućuju na nepromjenjivu memoriju (NVM).
  • Implementirano Pregled API-ja pristupa stranoj memoriji, koji omogućava Java aplikacijama da bezbedno i efikasno pristupe memorijskim regionima izvan Java hrpe manipulisanjem novim apstrakcijama MemorySegment, MemoryAddress i MemoryLayout.
  • Najavljeno zastarjeli portovi za Solaris OS i SPARC procesore (Solaris/SPARC, Solaris/x64 i Linux/SPARC) s namjerom da se ti portovi uklone u budućnosti. Ukidanje ovih portova će omogućiti zajednici da ubrza razvoj novih OpenJDK funkcija bez gubljenja vremena na održavanje Solaris- i SPARC-specifičnih karakteristika.
  • Izbrisano sakupljač smeća CMS (Concurrent Mark Sweep), koji je prije dvije godine označen kao zastarjeli i ostao je neodržavan (CMS je odavno zamijenjen G1 sakupljačem smeća). osim toga, najavio zastarjela upotreba kombinacije parallelScavenge i SerialOld algoritama za sakupljanje smeća (pokrenuti s opcijama “-XX:+UseParallelGC -XX:-UseParallelOldGC”).
  • Eksperimentalna podrška za ZGC (Z Garbage Collector) sakupljač smeća je pružena na macOS i Windows platformama (ranije podržano samo na Linuxu). ZGC radi u pasivnom režimu, minimizira kašnjenje zbog sakupljanja smeća što je više moguće (vrijeme zastoja pri korištenju ZGC-a ne prelazi 10 ms.) i može raditi s malim i ogromnim hrpama, veličine od nekoliko stotina megabajta do mnogo terabajta.
  • Uklonjeno Komplet alata i API za komprimiranje JAR datoteka pomoću Pack200 algoritma.

izvor: opennet.ru

Dodajte komentar