Programmēšana

JDK 12: Java 12 jaunās funkcijas

Tagad ir pieejams Java Development Kit 12 produkcijas laidiens, kura pamatā ir Java SE (Standard Edition) 12. JDK 12 būvējumi ir pieejami no Oracle operētājsistēmām Linux, Windows un MacOS.

Kur lejupielādēt JDK 12

JDK 12 var lejupielādēt no Java.net vietnes.

Atvērtā koda būvējumi tiek nodrošināti saskaņā ar GNU General Public License v2 ar Classpath Exception. JDK 12 komerciālās versijas no Oracle var atrast Oracle Technology tīklā ar neatvērtā pirmkoda licenci.

Jaunas funkcijas Java 12

Shenandoah atkritumu savācējs

Java 12 pievieno Shenandoah, eksperimentālu atkritumu savākšanas algoritmu, lai samazinātu atkritumu savākšanas pauzes laiku, veicot evakuācijas darbus vienlaikus ar Java pavedienu palaišanu. Šenandoahs nodrošina piemērotu algoritmu lietojumprogrammām, kas novērtē atsaucību un paredzamas īsas pauzes. Mērķis nav novērst visus JVM pauzes jautājumus.

Red Hat pašlaik atbalsta Shenandoah Aarch64 un AMD64 arhitektūrās.

G1 atkritumu savācējam ir jauktas jauktas kolekcijas

Java 12 padara G1 jauktās kolekcijas pārtraucamas, ja tās var pārsniegt pauzes mērķi. G1 mērķis bija sasniegt lietotāja sniegto pauzes laika mērķi savākšanas pauzēm.

Iepriekš uzlabots analīzes dzinējs izvēlējās veicamā darba apjomu kolekcijas laikā. Rezultāts bija reģionu kopums, kas pazīstams kā kolekcijas komplekts. Kad komplekts bija noteikts un kolekcija sākta, G1 bez apstājas savāca visus dzīvos objektus kolekciju reģionos visos reģionos. Bet tas var novest pie tā, ka G1 pārsniegs pauzes laika mērķi, ja lietojumprogrammas heiristika izvēlēsies pārāk lielu kolekciju kopu.

Bija nepieciešams mehānisms, lai noteiktu, kad heiristika atkārtoti izvēlējās nepareizu darbu daudzumu kolekcijām, un, ja tas notika, G1 ir licis veikt savākšanas darbus pakāpeniski, kur kolekciju pēc katra soļa var pārtraukt. Java 12 ieviestais mehānisms ļauj G1 biežāk sasniegt pauzes laika mērķi.

Ātra neizmantotās saistītās atmiņas atgriešana

Java 12 uzlabo G1, lai dīkstāvē automātiski atgrieztu Java kaudzes atmiņu operētājsistēmā. Šī atmiņa tiek izlaista saprātīgā laika periodā, kad ir ļoti zema lietojuma aktivitāte.

Iepriekš G1 atmiņu no kaudzes atdeva tikai pilnīgas atkritumu savākšanas laikā vai vienlaicīga cikla laikā. Tā kā G1 mēģina izvairīties no pilnīgas atkritumu savākšanas, tikai izraisot vienlaicīgu ciklu, pamatojoties uz kaudzes aizņemšanu un sadales aktivitāti, tas daudzos gadījumos neatgrieztu kaudzes atmiņu, ja vien tas nebūtu spiests to darīt ārēji. Šī rīcība bija neizdevīga konteineru vidēs, kur resursi tiek apmaksāti par izmantošanu. Pat ja JVM neaktivitātes dēļ izmanto tikai daļu no piešķirtās atmiņas, G1 saglabāja pilnu kaudzi. Tātad klienti visu laiku maksāja par visiem resursiem, un mākoņa nodrošinātāji nevarēja pilnībā izmantot savu aparatūru.

Izmantojot Java 12, JVM var noteikt kaudzes nepietiekamas izmantošanas fāzes un automātiski samazināt kaudzes lietojumu tajā laikā.

JVM konstantes API

Šī API modelē atslēgas klases failu un izpildlaika artefaktu nominālos aprakstus, īpaši konstantes, kuras var ielādēt no nemainīgā kopas. Java 12 jaunā paketē definē uz vērtību balstītu simbolisku atsauces tipu saimi, java.lang.invoke.constant, lai aprakstītu katra veida ielādējamo konstanti.

Katrā Java klasē pastāvīgi baseini, kas klasē glabā operandus un baitkodu instrukcijas. Ieraksti nemainīgajā krājumā apraksta izpildlaika artefaktus, piemēram, klases un metodes, vai vienkāršas vērtības, piemēram, virknes un veselus skaitļus. Šie ieraksti ir pazīstami kā ielādējamas konstantes.

Programmām, kas manipulē ar klases failiem, jā modelē baitkodu instrukcijas un savukārt ielādējamas konstantes. Bet standarta Java tipu izmantošana ielādējamo konstanšu modelēšanai ir nepietiekama. Tas var būt pieņemams ielādējamai konstantei, kas apraksta virkni, taču problemātiska ir ielādējamajai konstantei, kas raksturo klasi, jo “dzīvas” izveidošana Klase objekts balstās uz klases ielādes pareizību un konsekvenci. Tomēr klases slodzei ir daudz atkarību no vides un atteices režīmi.

Tātad programmas, kas nodarbojas ar ielādējamām konstantēm, varētu vienkāršot, ja tās varētu manipulēt ar klasēm un metodēm un mazāk zināmiem artefaktiem, piemēram, metožu rokturiem un dinamiski aprēķinātām konstantēm nominālā, simboliskā formā. Tādējādi JVM konstantu API nodrošina bibliotēkām un rīkiem vienu, standarta veidu, kā aprakstīt ielādējamas konstantes.

Uzlabota startēšana, CDS un atkritumu savākšana

Java 12 uzlabo JDK veidošanas procesu, lai ģenerētu noklusējuma klases datu koplietošanas (CDS) arhīvu, izmantojot noklusējuma klašu sarakstu, 64 bitu platformās. Tas uzlabo startēšanas laiku ārpus kastes un novērš nepieciešamību palaist -Xshare: izgāzt gūt labumu no CDS. JDK veidošanas process ir modificēts tā, lai tas darbotos java-xshare: dump pēc attēla saistīšanas.

Lai uzlabotu atmiņas izkārtojumu parastos gadījumos, ir iekļautas papildu komandrindas opcijas, lai precīzi pielāgotu atkritumu savākšanas kaudzes laikus. Lietotāji ar sarežģītākām prasībām, piemēram, pielāgotu klašu saraksti, kas ietver lietojumprogrammu klases un dažādas atkritumu savākšanas konfigurācijas, joprojām var izveidot pielāgotu CDS arhīvu.

Samazināts ARM portu skaits

Java 12 noņem visus avotus, kas saistīti ar arm64 portu, saglabājot 32 bitu ARM un 64 bitu aarch64. Šīs porta noņemšana ļautu ieguldītājiem koncentrēties uz vienu 64 bitu ARM ieviešanu un novērst dublētos darbus, kas rodas, uzturot divas ostas. Pašlaik divi 64 bitu ARM porti atrodas JDK.

Pārslēgt izteiksmes

Komutācijas izteiksmes vienkāršo kodēšanu, paplašinot slēdzis paziņojumu, tāpēc to var izmantot vai nu kā paziņojumu, vai kā izteicienu. Tas dod iespēju gan paziņojumos, gan izteicienos izmantot vai nu “tradicionālo”, vai “vienkāršoto” darbības jomu un kontrolēt plūsmas darbību. Šīs izmaiņas nodrošina vienkāršāku “ikdienas” kodēšanu un sagatavo veidu, kā izmantot modeļu atbilstību slēdzis.

Kad Java veidotāji pāriet uz modeļu saskaņošanu, Java pārkāpumislēdzis paziņojums ir kļuvis par šķērsli. Tie ietver slēdžu bloku noklusējuma vadības plūsmas uzvedību; noklusējuma slēdžu bloku darbības joma, kurā bloks tiek uzskatīts par vienu vienotu darbības jomu; un pārslēdziet darbu tikai kā paziņojumu. Pašreizējais Java dizains slēdzis paziņojums cieši seko valodām, piemēram, C ++, un pēc noklusējuma atbalsta krituma semantiku. Šī vadības plūsma ir bijusi noderīga, rakstot zema līmeņa kodu. Bet, ja slēdzi izmanto augstāka līmeņa kontekstos, tā kļūdām raksturīgais raksturs sāk atsvērt elastību.

Pamata etalonu komplekts

JDK 12 ir iekļauta mikrokameru pamata pakete, kas ir pievienota platformas pirmkodam. Mērķis ir atvieglot izstrādātājiem esošo etalonu izpildi vai jaunu izveidi.

2014. gada jūlijā izveidoto un 2018. gada novembra sākumā atjaunināto mikrozīmju komplekta priekšlikumu atbalstīja Java Microbenchmark Harness (JMH), lai izveidotu Java un citās JVM valodās rakstītus etalonus. Komplekts ir izvietots ar JDK pirmkodu vienā direktorijā, un izstrādātāji var viegli pievienot jaunus etalonus.

Tas nebija mērķis nodrošināt etalonus jaunām JDK funkcijām vai izveidot pilnu etalonu kopumu, kas aptvertu visu JDK. Ņemiet vērā arī to, ka etalonu komplekts nav nepieciešams regulārām JDK būvēm, bet ir atsevišķs būvēšanas mērķis.

Priekšlikums aicināja izveidot jaunu lapu vietnē wiki.openjdk.java.net, lai paskaidrotu, kā izstrādāt etalonus un aprakstīt prasības. Šīs prasības noteiks kodēšanas standartu, reproducējamas veiktspējas un dokumentācijas ievērošanu.

JDK 12 atjauninājumi

Plāni prasa, lai JDK 12 saņemtu divus atjauninājumus, pirms sešu mēnešu laikā JDK 13 pārņems viņu. JDK 12 ir daļa no Oracle sešu mēnešu izlaišanas kadences, kas tika ieviesta ar JDK 9 2017. gada septembrī. Atšķirībā no JDK 11, kas ir ilgtermiņa atbalsta izlaidums un plānots vairāku gadu atbalsts, JDK 12 raksturo kā funkciju izlaišanu.

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