Java SE 16 izdanje

Nakon šest mjeseci razvoja, Oracle je objavio Java SE 16 (Java Platforma, Standard Edition 16), koji koristi OpenJDK projekat kao referentnu implementaciju. Java SE 16 održava kompatibilnost unatrag sa prethodnim izdanjima Java platforme; svi prethodno napisani Java projekti će raditi bez promjena kada se pokrenu pod novom verzijom. Verzije Java SE 16 spremne za instalaciju (JDK, JRE i Server JRE) pripremljene su za Linux (x86_64, AArch64), Windows i macOS. Razvijena od strane OpenJDK projekta, Java 16 referentna implementacija je potpuno otvorenog koda pod GPLv2 licencom, sa GNU ClassPath izuzecima koji dozvoljavaju dinamičko povezivanje sa komercijalnim proizvodima.

Java SE 16 je klasifikovana 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. 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.

U pripremi za novo izdanje, razvoj je prešao sa Mercurial sistema kontrole verzija na Git i platformu za kolaborativni razvoj GitHub. Očekuje se da će migracija poboljšati performanse operacija spremišta, povećati efikasnost skladištenja, omogućiti pristup promjenama kroz historiju projekta, poboljšati podršku za pregled koda i omogućiti API-jima za automatizaciju tokova posla. Osim toga, korištenje Git-a i GitHub-a čini projekat atraktivnijim za početnike i programere koji su navikli na Git.

Nove funkcije u Javi 16 uključuju:

  • Dodan eksperimentalni modul jdk.incubator.vector sa implementacijom Vector API-ja, koji pruža funkcije za vektorske proračune koje se izvode pomoću vektorskih instrukcija na x86_64 i AArch64 procesorima i omogućavaju da se operacije istovremeno primjenjuju na više vrijednosti (SIMD). Za razliku od mogućnosti koje pruža HotSpot JIT kompajler za auto-vektorizaciju skalarnih operacija, novi API vam omogućava da eksplicitno kontrolišete vektorizaciju za paralelnu obradu podataka.
  • JDK i VM HotSpot kodu napisanom u C++ je dozvoljeno da koristi karakteristike uvedene u C++14 specifikaciji. Ranije su bili dozvoljeni standardi C++98/03.
  • ZGC (Z Garbage Collector), koji radi u pasivnom režimu i minimizira kašnjenja zbog sakupljanja smeća što je više moguće, dodao je mogućnost paralelne obrade stogova niti bez pauziranja niti aplikacije. ZGC sada ima samo posao koji zahtijeva suspenziju, koja ima stalna kašnjenja, koja obično ne prelaze nekoliko stotina mikrosekundi.
  • Dodata podrška za Unix utičnice (AF_UNIX) klasama SocketChannel, ServerSocketChannel i java.nio.channels.
  • Implementiran je port za distribuciju Linuxa Alpine sa standardnom C bibliotekom musl, koja je popularna u okruženjima za kontejnere, mikroservise, oblak i ugrađene sisteme. Predloženi port u takvim okruženjima omogućava vam da pokrenete Java programe poput običnih aplikacija. Osim toga, koristeći jlink, možete ukloniti sve neiskorištene module i stvoriti minimalno okruženje dovoljno za pokretanje aplikacije, što vam omogućava da kreirate kompaktne slike specifične za aplikaciju.
  • Implementiran je mehanizam Elastic Metaspace, optimizirajući operacije dodjele i vraćanja memorije koju zauzimaju metapodaci klase (metaspace) u JVM HotSpot. Upotreba Elastic Metaspace smanjuje fragmentaciju memorije, smanjuje opterećenje učitavača klasa, a također ima povoljan učinak na performanse dugotrajnih serverskih aplikacija zbog bržeg vraćanja memorije koju zauzimaju neiskorišteni metapodaci klase u operativni sistem. Da biste odabrali način oslobađanja memorije nakon rasterećenja klasa, nudi se opcija “-XX:MetaspaceReclaimPolicy=(uravnoteženo|agresivno|ništa)”.
  • Dodan je JDK port za Windows sisteme koji rade na hardveru sa procesorima baziranim na AArch64 arhitekturi.
  • Predložen je treći pregled API-ja za pristup stranoj memoriji, koji omogućava Java aplikacijama da bezbedno i efikasno pristupe memorijskim regionima izvan Java hrpe manipulisanjem novim apstrakcijama MemorySegment, MemoryAddress i MemoryLayout.
  • Implementiran je eksperimentalni Foreign Linker API koji pruža pristup sa Jave na izvorni kod. Zajedno sa Foreign-Memory API-jem, novi programski interfejs čini mnogo lakšim kreiranje omota u odnosu na konvencionalne deljene biblioteke.
  • Dodan je uslužni program 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.
  • Stroga enkapsulacija svih JDK internih komponenti je omogućena po defaultu, sa izuzetkom kritičnih API-ja kao što je sun.misc.Unsafe. Vrijednost opcije “--illegal-access” je sada podešena na “deny” umjesto “dozvola” prema zadanim postavkama, što će blokirati pokušaje koda da pristupi većini internih klasa, metoda i polja. Da biste zaobišli ograničenje, koristite opciju “-illegal-access=permit”.
  • Implementacija podudaranja uzorka u operatoru “instanceof” je stabilizirana, što vam omogućava da odmah definirate lokalnu varijablu koja će se odnositi na provjerenu vrijednost. Na primjer, možete odmah napisati “if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” bez eksplicitnog definiranja “String s = (String) obj”. Was: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Sada možete učiniti bez definiranja “Group group = (Group) obj”: if (obj instanceof Group group) { var entries = group.getEntries(); }
  • Implementacija ključne riječi "record" je stabilizirana, pružajući kompaktan oblik za definicije klasa koji eliminira potrebu za eksplicitnim definiranjem različitih metoda niskog nivoa kao što su equals(), hashCode() i toString() u slučajevima gdje su podaci pohranjeni samo u poljima sa kojima se ne menja. Kada klasa koristi standardne implementacije metoda equals(), hashCode() i toString(), može bez njihove eksplicitne definicije: javni zapis BankTransaction(LocalDate datum, dvostruki iznos, String opis) {}

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

  • Drugi nacrt je predložen za zapečaćene klase i interfejse koje druge klase i interfejsi ne mogu koristiti za nasleđivanje, proširenje ili nadjačavanje implementacija. Zapečaćene klase takođe pružaju deklarativniji način za ograničavanje upotrebe superklase od modifikatora pristupa, na osnovu eksplicitnog navođenja potklasa dozvoljenih za proširenje. paket com.example.geometry; javna zatvorena klasa Shape dozvoljava com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}

izvor: opennet.ru

Dodajte komentar