Izdaja Java SE 16

Po šestih mesecih razvoja je Oracle izdal Java SE 16 (Java Platform, Standard Edition 16), ki uporablja projekt OpenJDK kot referenčno izvedbo. Java SE 16 ohranja povratno združljivost s prejšnjimi izdajami platforme Java; vsi predhodno napisani projekti Java bodo ob zagonu pod novo različico delovali brez sprememb. Za namestitev pripravljene različice Java SE 16 (JDK, JRE in Server JRE) so pripravljene za Linux (x86_64, AArch64), Windows in macOS. Referenčna izvedba Java 16, ki jo je razvil projekt OpenJDK, je popolnoma odprtokodna pod licenco GPLv2, z izjemami GNU ClassPath, ki omogočajo dinamično povezovanje s komercialnimi izdelki.

Java SE 16 je razvrščena kot izdaja splošne podpore in bo prejemala posodobitve do naslednje izdaje. Podružnica dolgoročne podpore (LTS) bi morala biti Java SE 11, ki bo prejemala posodobitve do leta 2026. Naslednja izdaja LTS je predvidena za september 2021. Naj vas spomnimo, da je projekt z izdajo Jave 10 prešel na nov razvojni proces, kar pomeni krajši cikel za oblikovanje novih izdaj. Nova funkcionalnost je zdaj razvita v eni stalno posodobljeni glavni veji, ki vključuje že pripravljene spremembe in iz katere se veje razvejajo vsakih šest mesecev za stabilizacijo novih izdaj.

V pripravah na novo izdajo se je razvoj preselil s sistema za nadzor različic Mercurial na Git in platformo za sodelovalni razvoj GitHub. Pričakuje se, da bo selitev izboljšala zmogljivost operacij repozitorija, povečala učinkovitost shranjevanja, omogočila dostop do sprememb v celotni zgodovini projekta, izboljšala podporo za pregled kode in omogočila API-jem za avtomatizacijo potekov dela. Poleg tega je zaradi uporabe Gita in GitHuba projekt privlačnejši za začetnike in razvijalce, ki so vajeni Gita.

Nove funkcije v Javi 16 vključujejo:

  • Dodan eksperimentalni modul jdk.incubator.vector z implementacijo vektorskega API-ja, ki zagotavlja funkcije za vektorske izračune, ki se izvajajo z vektorskimi navodili na procesorjih x86_64 in AArch64 in omogočajo hkratno uporabo operacij za več vrednosti (SIMD). V nasprotju z zmožnostmi, ki jih ponuja prevajalnik HotSpot JIT za samodejno vektorizacijo skalarnih operacij, vam novi API omogoča izrecno nadzorovanje vektorizacije za vzporedno obdelavo podatkov.
  • Kodi JDK in VM HotSpot, napisani v C++, je dovoljena uporaba funkcij, predstavljenih v specifikaciji C++14. Prej so bili dovoljeni standardi C++98/03.
  • ZGC (Z Garbage Collector), ki deluje v pasivnem načinu in čim bolj zmanjša zamude zaradi zbiranja smeti, je dodal možnost vzporedne obdelave nizov niti brez prekinitve aplikacijskih niti. ZGC ima zdaj samo delo, ki zahteva prekinitev, ki ima stalne zakasnitve, ki običajno ne presegajo nekaj sto mikrosekund.
  • Dodana podpora za vtičnice Unix (AF_UNIX) v razrede SocketChannel, ServerSocketChannel in java.nio.channels.
  • Izvedena je bila vrata za distribucijo Linuxa Alpine s standardno knjižnico C musl, ki je priljubljena v okoljih za vsebnike, mikrostoritve, oblake in vgrajene sisteme. Predlagana vrata v takšnih okoljih omogočajo izvajanje programov Java kot običajnih aplikacij. Poleg tega lahko z uporabo jlink odstranite vse neuporabljene module in ustvarite minimalno okolje, ki zadostuje za zagon aplikacije, kar vam omogoča ustvarjanje kompaktnih slik, specifičnih za aplikacijo.
  • Implementiran je bil mehanizem Elastic Metaspace, ki optimizira operacije dodeljevanja in vračanja pomnilnika, ki ga zasedajo metapodatki razreda (metaprostor) v JVM HotSpot. Uporaba Elastic Metaspace zmanjša razdrobljenost pomnilnika, zmanjša stroške nalagalnika razredov in ugodno vpliva tudi na delovanje dolgo delujočih strežniških aplikacij zaradi hitrejšega vračanja pomnilnika, ki ga zasedajo neuporabljeni metapodatki razreda, v operacijski sistem. Za izbiro načina sprostitve pomnilnika po raztovarjanju razredov je na voljo možnost “-XX:MetaspaceReclaimPolicy=(uravnoteženo|agresivno|nobeno)”.
  • Vrata JDK so bila dodana za sisteme Windows, ki delujejo na strojni opremi s procesorji, ki temeljijo na arhitekturi AArch64.
  • Predlagan je bil tretji predogled API-ja za dostop do zunanjega pomnilnika, ki aplikacijam Java omogoča varen in učinkovit dostop do pomnilniških območij zunaj kopice Java z manipulacijo novih abstrakcij MemorySegment, MemoryAddress in MemoryLayout.
  • Implementiran je bil eksperimentalni API za zunanje povezovalce, ki omogoča dostop od Jave do izvorne kode. Skupaj z API-jem za tuji pomnilnik novi programski vmesnik olajša ustvarjanje ovojov prek običajnih knjižnic v skupni rabi.
  • Dodan je pripomoček jpackage, ki vam omogoča ustvarjanje paketov za samostojne aplikacije Java. Pripomoček temelji na javapackagerju iz JavaFX in omogoča ustvarjanje paketov v formatih, ki so izvirni za različne platforme (msi in exe za Windows, pkg in dmg za macOS, deb in rpm za Linux). Paketi vključujejo vse zahtevane odvisnosti.
  • Stroga enkapsulacija vseh notranjih elementov JDK je privzeto omogočena, z izjemo kritičnih API-jev, kot je sun.misc.Unsafe. Vrednost možnosti »--illegal-access« je zdaj privzeto nastavljena na »deny« namesto »permit«, kar bo blokiralo poskuse kode za dostop do večine notranjih razredov, metod in polj. Če želite zaobiti omejitev, uporabite možnost »-illegal-access=permit«.
  • Implementacija ujemanja vzorcev v operatorju »instanceof« je bila stabilizirana, kar vam omogoča, da takoj definirate lokalno spremenljivko za sklicevanje na preverjeno vrednost. Takoj lahko na primer napišete »if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}«, ne da bi eksplicitno definirali »String s = (String) obj«. Bilo je: if (obj instanceof Group) { Group group = (Group) obj; var vnosov = group.getEntries(); } Zdaj lahko storite brez definiranja »Group group = (Group) obj«: if (obj instanceof Group group) { var entries = group.getEntries(); }
  • Implementacija ključne besede "record" je bila stabilizirana in zagotavlja kompaktno obliko za definicije razredov, ki odpravlja potrebo po eksplicitnem definiranju različnih nizkonivojskih metod, kot so equals(), hashCode() in toString() v primerih, ko so podatki shranjeni samo v poljih, s katerimi se ne spreminja. Ko razred uporablja standardne izvedbe metod equals(), hashCode() in toString(), lahko deluje brez njihove eksplicitne definicije: javni zapis BankTransaction(datum lokalnega datuma, dvojni znesek, opis niza) {}

    Ta deklaracija bo poleg metod konstruktorja in pridobivanja samodejno dodala izvedbe metod equals(), hashCode() in toString().

  • Drugi osnutek je predlagan za zapečatene razrede in vmesnike, ki jih drugi razredi in vmesniki ne morejo uporabiti za podedovanje, razširitev ali preglasitev implementacij. Zapečateni razredi zagotavljajo tudi bolj deklarativen način za omejevanje uporabe nadrazreda kot modifikatorji dostopa, ki temelji na eksplicitnem seznamu podrazredov, dovoljenih za razširitev. paket com.example.geometry; javni zapečateni razred Oblika dovoljuje com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}

Vir: opennet.ru

Dodaj komentar