Programiranje

JDK 12: Nove funkcije v Javi 12

Izdajna različica Java Development Kit 12, ki temelji na Java SE (Standard Edition) 12, je zdaj na voljo. Zgradbe JDK 12 so na voljo pri Oracle za Linux, Windows in MacOS.

Kje prenesti JDK 12

JDK 12 lahko prenesete s spletnega mesta Java.net.

Odprtokodne gradnje so na voljo pod GNU General Public License v2, z izjemo Classpath. Komercialne gradnje JDK 12 podjetja Oracle lahko najdete v omrežju Oracle Technology pod licenco, ki ni odprta.

Nove funkcije v Javi 12

Odvoz smeti Shenandoah

Java 12 doda Shenandoah, eksperimentalni algoritem za zbiranje smeti, da zmanjša čas zaustavitve zbiranja smeti z izvajanjem evakuacijskih del hkrati z izvajanjem niti Java. Shenandoah ponuja primeren algoritem za aplikacije, ki cenijo odzivnost in predvidljive kratke premore. Namen pa ni odpraviti vseh težav z začasno zaustavitvijo JVM.

Red Hat trenutno podpira Shenandoah na arhitekturah Aarch64 in AMD64.

Mešljive zbirke za zbiralnik smeti G1

Java 12 mešane zbirke G1 prekine, če lahko presežejo cilj premora. Cilj G1 je bil doseči uporabniški ciljni čas premora za pavze zbiranja.

Pred tem je mehanizem za napredno analizo izbral obseg dela med zbiranjem. Rezultat je bil nabor regij, znan kot zbirka. Ko je bil sklop določen in se je zbiranje začelo, je G1 brez zaustavljanja zbiral vse žive predmete v regijah zbirk v vseh regijah. Toda to bi lahko vodilo do tega, da G1 preseže cilj časa premora, če bi hevristika aplikacije izbrala prevelik nabor zbirk.

Potreben je bil mehanizem za odkrivanje, kdaj je hevristika večkrat izbrala nepravilno količino dela za zbirke, in če se je to zgodilo, naj G1 postopoma zbira postopoma, pri čemer se lahko zbirka prekine po vsakem koraku. Mehanizem, uveden v Javi 12, omogoča G1, da pogosteje doseže cilj časa premora.

Takojšnja vrnitev neuporabljenega predanega pomnilnika

Java 12 izboljša G1, da samodejno vrne pomnilnik kopice Java v operacijski sistem v stanju mirovanja. Ta pomnilnik se sprosti v razumnem časovnem obdobju, ko je aktivnost aplikacije zelo majhna.

Prej je G1 vrnil pomnilnik s kopice samo pri celotnem zbiranju smeti ali med sočasnim ciklom. Ko se G1 poskuša izogniti popolnemu zbiranju smeti in sproži le sočasni cikel, ki temelji na zasedenosti kopice in dejavnosti dodeljevanja, v mnogih primerih ne bo vrnil spomina kopice, če tega ne bo prisiljen zunaj. To vedenje je bilo neugodno v okoljih zabojnikov, kjer se viri plačujejo z uporabo. Tudi če JVM zaradi neaktivnosti uporabi le del dodeljenega pomnilnika, je G1 ohranil celotno kopico. Kupci so torej ves čas plačevali vse vire, ponudniki oblaka pa niso mogli v celoti izkoristiti svoje strojne opreme.

Z Javo 12 lahko JVM zazna faze premajhne uporabe kupa in v tem času samodejno zmanjša njegovo uporabo kopice.

API konstant JVM

Ta API modelira nominalne opise datotek ključnega razreda in artefakte izvajalnega okolja, zlasti konstante, ki jih je mogoče naložiti iz konstantnega področja. Java 12 v novem paketu definira družino simboličnih referenčnih tipov, ki temeljijo na vrednosti, java.lang.invoke.constant, za opis vsake vrste naložljive konstante.

V vsakem razredu Java obstajajo konstantna področja, ki v razredu shranjujejo operande in navodila bajtkode. Vnosi v konstantnem področju opisujejo bodisi izvajalne artefakte, kot so razredi in metode, bodisi preproste vrednosti, kot so nizi in cela števila. Ti vnosi so znani kot naložljive konstante.

Programi, ki manipulirajo z datotekami razredov, morajo modelirati navodila bajtkode in nato naložljive konstante. Toda uporaba standardnih tipov Java za modeliranje naložljivih konstant ni ustrezna. To je morda sprejemljivo za naložljivo konstanto, ki opisuje niz, vendar je problematično za naložljivo konstanto, ki opisuje razred, ker ustvarja "živo" Razred objekt temelji na pravilnosti in doslednosti nalaganja razredov. Nalaganje razredov pa ima veliko okoljskih odvisnosti in načinov okvar.

Tako bi lahko programe, ki se ukvarjajo z naložljivimi konstantami, poenostavili, če bi lahko manipulirali z razredi in metodami ter manj znanimi artefakti, kot so ročaji metod in dinamično izračunane konstante v nominalni, simbolni obliki. Tako API konstant JVM daje knjižnicam in orodjem en sam, standardni način za opisovanje naložljivih konstant.

Izboljšan zagon, CDS in zbiranje smeti

Java 12 izboljša postopek gradnje JDK, da na 64-bitnih platformah ustvari arhiv privzete skupne rabe podatkov (CDS) z uporabo privzetega seznama razredov. To izboljša čas zagona, ki ni na voljo, in odpravi potrebo po zagonu -Xshare: smetišče izkoristiti CDS. Postopek gradnje JDK je bil spremenjen tako, da se izvaja java-xshare: dump po povezavi slike.

Vključene so dodatne možnosti ukazne vrstice za natančno nastavitev časa kopičenja smeti, da se izboljša postavitev pomnilnika za pogoste primere. Uporabniki z naprednejšimi zahtevami, kot so seznami razredov po meri, ki vključujejo razrede aplikacij in različne konfiguracije zbiranja smeti, še vedno lahko ustvarijo arhiv CDS po meri.

Zmanjšano število vrat ARM

Java 12 odstrani vse vire, povezane z arm64 vrata, hkrati pa ohrani 32-bitno ARM in 64-bitno aarch64. Odstranitev tega pristanišča bi sodelavcem omogočila, da se osredotočijo na eno samo 64-bitno izvajanje ARM in odpravijo podvojena dela, ki bi nastala zaradi vzdrževanja dveh vrat. Trenutno sta v JDK dve 64-bitni vrati ARM.

Preklopi izraze

Preklopni izrazi poenostavijo kodiranje z razširitvijo stikalo izjava, tako da se lahko uporablja kot izjava ali izraz. To tako izjavam kot izrazom omogoča uporabo "tradicionalnega" ali "poenostavljenega" obsega in nadzor vedenja toka. Rezultat teh sprememb je preprostejše »vsakodnevno« kodiranje in priprava za uporabo ujemanja vzorcev v stikalo.

Ko graditelji Java podpirajo ujemanje vzorcev, nepravilnosti Javastikalo izjave postale ovire. Sem spadajo privzeto vedenje krmilnega toka stikalnih blokov; privzeto obseg stikalnih blokov, pri katerem se blok obravnava kot en sam obseg; in stikalo deluje samo kot izjava. Trenutna zasnova Jave stikalo stavek natančno sledi jezikom, kot je C ++, in privzeto podpira padajočo semantiko. Ta nadzorni tok je bil koristen za pisanje nizke ravni kode. Ko pa se stikalo uporablja v kontekstih višje ravni, začne narava, nagnjena k napakam, odtehtati prilagodljivost.

Osnovna referenčna zbirka

JDK 12 vključuje osnovno zbirko mikrobeležnic, ki so bile dodane v izvorno kodo platforme. Cilj je razvijalcem olajšati izvajanje obstoječih primerjalnih meril ali gradnjo novih.

Predlog za nabor mikrobenčmarkov, ki je bil ustvarjen julija 2014 in posodobljen v začetku novembra 2018, je podprl Java Microbenchmark Harness (JMH) za gradnjo primerjalnih meril, napisanih v Javi in ​​drugih jezikih JVM. Paket je kolociran z izvorno kodo JDK v enem imeniku, razvijalci pa lahko preprosto dodajajo nova merila uspešnosti.

Ni bil cilj zagotoviti primerjalne vrednosti za nove funkcije JDK ali ustvariti celoten sklop primerjalnih preizkusov, ki zajemajo vse v JDK. Upoštevajte tudi, da zbirka primerjalnih preizkusov ni potrebna za običajne gradnje JDK, ampak je ločen cilj gradnje.

Predlog je pozval k ustvarjanju nove strani na wiki.openjdk.java.net, ki bo pojasnila, kako razviti merila uspešnosti in opisati zahteve. Te zahteve bodo zahtevale spoštovanje standardov kodiranja, ponovljive zmogljivosti in dokumentacije.

Posodobitve JDK 12

V načrtu je, da JDK 12 prejme dve posodobitvi, preden ga v šestih mesecih nasledi JDK 13. JDK 12 je del Oraclove šestmesečne kadence izdaje, ki je bila uvedena z JDK 9 septembra 2017. JDK 12 je označen kot funkcijska izdaja, za razliko od JDK 11, ki je dolgoročna izdaja podpore z načrtovano večletno podporo.

$config[zx-auto] not found$config[zx-overlay] not found