Programavimas

JDK 12: Naujos „Java 12“ funkcijos

Dabar yra prieinamas „Java Development Kit 12“ leidimas, pagrįstas „Java SE“ („Standard Edition“) 12. „JDK 12“ versijas galite įsigyti iš „Oracle“, skirtų „Linux“, „Windows“ ir „MacOS“.

Kur atsisiųsti JDK 12

JDK 12 galite atsisiųsti iš „Java.net“ svetainės.

Atvirojo kodo versijos pateikiamos pagal GNU „General Public License v2“ su „Classpath“ išimtimi. JDK 12 komercinius „Oracle“ kūrinius galima rasti „Oracle Technology“ tinkle pagal ne atvirojo kodo licenciją.

Naujos „Java 12“ funkcijos

„Shenandoah“ šiukšlių surinkėjas

„Java 12“ prideda „Shenandoah“, eksperimentinį šiukšlių surinkimo algoritmą, kad sutrumpintų šiukšlių surinkimo pauzių laiką, atlikdami evakuacijos darbus kartu su „Java“ temų paleidimu. „Shenandoah“ pateikia tinkamą programų, vertinančių reagavimą ir nuspėjamas trumpas pauzes, algoritmą. Vis dėlto tikslas nėra išspręsti visos JVM pristabdymo problemos.

„Red Hat“ šiuo metu palaiko „Shenandoah“ Aarch64 ir AMD64 architektūrose.

G1 šiukšlių surinkėjui skirtos mišrios kolekcijos

„Java 12“ leidžia G1 mišriąsias kolekcijas nutraukti, jei jos gali viršyti pristabdymo tikslą. „G1“ tikslas buvo pasiekti vartotojo pateiktą pauzės laiko tikslą jo surinkimo pauzėms.

Anksčiau pažangus analizės variklis pasirinko surinkimo metu atliktinų darbų kiekį. Rezultatas buvo regionų rinkinys, žinomas kaip kolekcijos rinkinys. Nustačius rinkinį ir pradėjus rinkti, G1 be sustojimo surinko visus gyvus objektus kolekcijos regionuose visuose regionuose. Tačiau dėl to G1 gali viršyti pauzės laiko tikslą, jei programos euristika pasirinktų per didelę rinkinių rinkinį.

Reikėjo mechanizmo, kad būtų galima nustatyti, kada euristika pakartotinai pasirinko neteisingą darbo kiekį kolekcijoms, o jei taip nutiko, G1 turėjo palaipsniui atlikti surinkimo darbus, kur po kiekvieno žingsnio kolekciją būtų galima nutraukti. „Java 12“ įdiegtas mechanizmas leidžia G1 dažniau pasiekti pauzės laiko tikslą.

Skubus grąžinti nepanaudotą įamžintą atmintį

„Java 12“ patobulina G1, kad neveikiant automatiškai grąžintų „Java“ kaupiamąją atmintį į operacinę sistemą. Ši atmintis atleidžiama per pagrįstą laiką, kai yra labai mažas programos aktyvumas.

Anksčiau G1 atmintį iš kaupo grąžindavo tik atliekų surinkimo metu arba tuo pačiu metu. Kai G1 bando išvengti visiško šiukšlių surinkimo ir tik suaktyvinti ciklą, pagrįstą krūvos užimtumu ir paskirstymo veikla, jis daugeliu atvejų negrąžintų krūvos atminties, nebent būtų priverstas tai daryti išoriškai. Toks elgesys buvo nepalankus konteinerių aplinkoje, kur už išteklius mokama naudojant. Net kai JVM dėl neveiklumo naudoja tik dalį priskirtos atminties, G1 išlaikė visą krūvą. Taigi, klientai visą laiką mokėjo už visus išteklius, o debesų tiekėjai negalėjo pilnai išnaudoti savo aparatūros.

Naudodamas „Java 12“, JVM gali aptikti nepakankamo krūvos panaudojimo fazes ir automatiškai sumažinti jo kiekį per tą laiką.

JVM konstantų API

Ši API modeliuoja nominalius raktų klasės failų ir vykdymo laiko artefaktų aprašymus, ypač konstantas, kurias galima įkelti iš pastovaus telkinio. „Java 12“ apibrėžia vertybinių simbolinių nuorodų tipų grupę naujame pakete, java.lang.invoke.constant, apibūdinti kiekvieną pakraunamos konstantos rūšį.

Nuolatiniai baseinai egzistuoja kiekvienoje „Java“ klasėje, juose saugomi operandai ir baitkodo instrukcijos. Įrašai pastoviame telkinyje apibūdina vykdymo laiko artefaktus, pvz., Klases ir metodus, arba paprastas reikšmes, tokias kaip eilutės ir sveiki skaičiai. Šie įrašai yra žinomi kaip įkeliamos konstantos.

Programos, kurios manipuliuoja klasės failais, turi modeliuoti baitekodo instrukcijas ir savo ruožtu įkeliamas konstantas. Tačiau nepakanka naudoti standartinius „Java“ tipus įkeliamoms konstantoms modeliuoti. Tai gali būti priimtina įkeliamai konstantai, apibūdinančiai eilutę, tačiau problemiška įkeliamai konstantai, apibūdinančiai klasę, nes sukuriama „gyva“ Klasė objektas remiasi klasės pakrovimo teisingumu ir nuoseklumu. Tačiau klasės pakrovimas turi daug priklausomybės nuo aplinkos ir gedimo režimų.

Taigi, programos, susijusios su įkeliamomis konstantomis, galėtų būti supaprastintos, jei jos galėtų manipuliuoti klasėmis ir metodais bei mažiau žinomais artefaktais, tokiais kaip metodų rankenos ir dinamiškai apskaičiuotos konstantos nominalia, simboline forma. Taigi JVM konstantų API suteikia bibliotekoms ir įrankiams vieną standartinį būdą apibūdinti įkeliamas konstantas.

Patobulintas paleidimas, CDS ir šiukšlių surinkimas

„Java 12“ patobulina JDK kūrimo procesą, kad 64 bitų platformose sugeneruotų numatytąjį klasės duomenų pasidalijimo (CDS) archyvą, naudodamas numatytąjį klasių sąrašą. Tai pagerina paleidimo laiką iš karto ir pašalina poreikį paleisti -Xshare: išmesti pasinaudoti CDS. JDK kūrimo procesas buvo modifikuotas, kad būtų paleistas java-xshare: dump susiejus vaizdą.

Siekiant patobulinti atminties išdėstymą įprastais atvejais, buvo įtrauktos papildomos komandinės eilutės parinktys, skirtos šiukšlių surinkimo kaupo laikams tikslinti. Vartotojai, turintys pažangesnius reikalavimus, pvz., Pasirinktinių klasių sąrašus, kuriuose yra programų klasės ir skirtingos šiukšlių surinkimo konfigūracijos, vis tiek gali sukurti pasirinktinį CDS archyvą.

Sumažintas ARM prievadų skaičius

„Java 12“ pašalina visus šaltinius, susijusius su ranka64 prievadą išlaikant 32 bitų ARM ir 64 bitų aarch64. Pašalinus šį prievadą, prisidedantieji galėtų sutelkti pastangas į vieną 64 bitų ARM diegimą ir pašalinti pasikartojančius darbus, atsirandančius išlaikant du uostus. Šiuo metu JDK yra du 64 bitų ARM prievadai.

Perjungti išraiškas

"Switch" išraiškos supaprastina kodavimą pratęsiant perjungti sakinį, todėl jį galima naudoti kaip teiginį arba išraišką. Tai leidžia teiginiuose ir posakiuose naudoti „tradicinį“ arba „supaprastintą“ taikymo sritį ir valdyti srauto elgesį. Šie pakeitimai lemia paprastesnį „kasdienį“ kodavimą ir paruošia modelio derinimo būdą perjungti.

Kai „Java“ kūrėjai palaiko šablonų derinimą, „Java“ pažeidimaiperjungti pareiškimas tapo kliūtimi. Tai apima numatytąjį valdymo bloko valdymo srauto elgesį; numatytasis jungiklių blokų aprėptis, kai blokas traktuojamas kaip viena sritis; ir pereiti dirbti tik kaip pareiškimą. Dabartinis „Java“ dizainas perjungti teiginys atidžiai seka tokias kalbas kaip C ++ ir pagal nutylėjimą palaiko kritinę semantiką. Šis valdymo srautas buvo naudingas rašant žemo lygio kodą. Tačiau kai jungiklis naudojamas aukštesnio lygio kontekstuose, jo klaidoms būdingas pobūdis pradeda nusverti lankstumą.

Pagrindinis etalonų rinkinys

JDK 12 yra pagrindinis mikrobangų rinkinys, kuris buvo pridėtas prie platformos šaltinio kodo. Tikslas yra palengvinti kūrėjams esamų etalonų vykdymą ar naujų kūrimą.

2014 m. Liepos mėn. Sukurtas ir 2018 m. Lapkričio mėn. Pradžioje atnaujintas „microbenchmarks suite“ pasiūlymas buvo paremtas „Java Microbenchmark Harness“ (JMH), kad būtų galima sukurti „Java“ ir kitomis JVM kalbomis parašytus etalonus. Šis rinkinys yra sujungtas su JDK šaltinio kodu viename kataloge, o kūrėjai gali lengvai pridėti naujų etalonų.

Nebuvo tikslas pateikti naujų JDK funkcijų etalonų ar sukurti visą etalonų rinkinį, apimantį viską, kas yra JDK. Taip pat atkreipkite dėmesį, kad etalonų rinkinys nėra reikalingas įprastiems JDK kūrimams, tačiau yra atskiras kūrimo tikslas.

Pasiūlyme raginama sukurti naują puslapį wiki.openjdk.java.net, kuriame būtų paaiškinta, kaip parengti etalonus ir aprašyti reikalavimus. Šie reikalavimai įpareigos laikytis kodavimo standartų, atkuriamo veikimo ir dokumentų.

JDK 12 atnaujinimai

Planuose reikalaujama, kad JDK 12 gautų du atnaujinimus, kol JDK 13 jį pakeis per šešis mėnesius. „JDK 12“ yra „Oracle“ šešių mėnesių išleidimo kadencijos, pristatytos 2017 m. Rugsėjo mėn., Dalis. „JDK 12“ apibūdinamas kaip funkcijų leidimas, skirtingai nei „JDK 11“, kuris yra ilgalaikis palaikymo leidimas su planuojamu kelerių metų palaikymu.