Programovanie

JDK 12: Nové funkcie v prostredí Java 12

Teraz je k dispozícii produkčné vydanie vývojovej sady Java Development Kit 12 založené na prostredí Java SE (Standard Edition) 12. Verzie JDK 12 sú k dispozícii od spoločnosti Oracle pre Linux, Windows a MacOS.

Kde stiahnuť JDK 12

JDK 12 si môžete stiahnuť z webovej stránky Java.net.

Vytvorenia otvoreného zdroja sú poskytované v rámci GNU General Public License v2 s výnimkou Classpath. Komerčné zostavenia JDK 12 od spoločnosti Oracle možno nájsť v sieti Oracle Technology pod licenciou neotvoreného zdroja.

Nové funkcie v prostredí Java 12

Smetiar Shenandoah

Java 12 pridáva Shenandoah, experimentálny algoritmus zberu odpadu, na zníženie časových prestávok zberu odpadu vykonávaním evakuačných prác súčasne s behom vlákien Java. Shenandoah poskytuje vhodný algoritmus pre aplikácie, ktoré si cenia odozvu a predvídateľné krátke pauzy. Zámerom však nie je opraviť všetky problémy s pozastavením JVM.

Red Hat v súčasnosti podporuje Shenandoah na architektúrach Aarch64 a AMD64.

Vynikajúce zmiešané zbierky pre zberača odpadu G1

Vďaka Java 12 je možné zmiešané kolekcie G1 prerušiť, ak by mohli prekročiť cieľ pozastavenia. Cieľom G1 bolo splniť cieľový čas pauzy dodaný používateľom pre jeho pauzy zhromažďovania.

Technológia rozšírenej analýzy predtým vyberala množstvo práce, ktorá sa má vykonať počas zhromažďovania. Výsledkom bola sada oblastí známych ako kolekcia. Len čo bola sada určená a začalo sa zhromažďovanie, G1 bez zastavenia zhromaždil všetky živé objekty v oblastiach zbierok vo všetkých regiónoch. To by však mohlo viesť k tomu, že G1 prekročí cieľový čas pauzy, ak by heuristika aplikácie zvolila príliš veľkú sadu kolekcií.

Bol potrebný mechanizmus na zistenie, keď heuristika opakovane vyberala nesprávne množstvo práce pre zbierky, a ak sa tak stalo, nechala G1 vykonávať zbierkovú prácu postupne v krokoch, kde by sa mohla zbierka po každom kroku prerušiť. Mechanizmus zavedený v prostredí Java 12 umožňuje G1 častejšie plniť cieľ času pozastavenia.

Rýchly návrat nevyužitej odovzdanej pamäte

Java 12 vylepšuje G1 o automatické vrátenie haldy pamäte Java do operačného systému, keď je nečinný. Táto pamäť sa uvoľní v primeranom časovom období, keď je aplikácia veľmi nízka.

Predtým G1 vracala pamäť z haldy iba pri úplnom zbere odpadu alebo počas súbežného cyklu. Keď sa G1 snaží vyhnúť úplnému zberu odpadu, iba spúšťa súbežný cyklus založený na obsadenosti haldy a aktivite prideľovania, nevráti by haldu pamäte v mnohých prípadoch, pokiaľ k tomu nie je nútený externe. Toto správanie bolo nevýhodné v prostrediach kontajnerov, kde sa prostriedky platia používaním. Aj keď JVM kvôli nečinnosti využíva iba zlomok svojej pridelenej pamäte, G1 si zachoval celú hromadu. Zákazníci teda neustále platili za všetky zdroje a poskytovatelia cloudových technológií nemohli plne využívať ich hardvér.

S programom Java 12 môže JVM detekovať fázy nedostatočného využívania haldy a automaticky znižovať využitie haldy počas tejto doby.

Konštanty API JVM

Toto API modeluje nominálne popisy súborov triedy kľúčov a runtime artefaktov, najmä konštánt načítateľných z konštantnej oblasti. Java 12 definuje rodinu hodnotových symbolických referenčných typov v novom balíku, java.lang.invoke.konštantná, na opísanie každého druhu zaťažiteľnej konštanty.

V každej triede Java existujú konštantné fondy, ktoré v triede ukladajú operandy a inštrukcie bytecode. Položky v skupine konštánt popisujú buď runtime artefakty, ako sú triedy a metódy, alebo jednoduché hodnoty, ako sú reťazce a celé čísla. Tieto položky sú známe ako načítateľné konštanty.

Programy, ktoré manipulujú so súbormi triedy, musia modelovať pokyny v bajtkódoch a následne načítateľné konštanty. Ale použitie štandardných typov Javy na modelovanie načítateľných konštánt je neadekvátne. To môže byť prijateľné pre načítateľnú konštantu, ktorá popisuje reťazec, ale je problematické pre načítateľnú konštantu, ktorá popisuje triedu, pretože vytvorenie „živého“ záznamu Trieda objekt sa spolieha na správnosť a dôslednosť načítania triedy. Načítanie triedy má však veľa závislostí od prostredia a režimov zlyhania.

Programy, ktoré sa zaoberajú načítateľnými konštantami, by sa teda dali zjednodušiť, ak by mohli manipulovať s triedami a metódami a s menej známymi artefaktmi, ako sú napríklad manipulácie s metódami a dynamicky vypočítané konštanty, v nominálnej symbolickej podobe. Rozhranie API konštánt JVM teda poskytuje knižniciam a nástrojom jediný štandardný spôsob popisu načítateľných konštánt.

Vylepšené uvedenie do prevádzky, CDS a odvoz odpadu

Java 12 vylepšuje proces zostavovania JDK o generovanie archívu zdieľania údajov predvolenej triedy (CDS) pomocou zoznamu predvolených tried na 64-bitových platformách. To zlepšuje čas potrebný na spustenie systému z prevádzky a eliminuje sa potreba jeho spustenia -Xshare: výpis využívať výhody CDS. Proces zostavovania JDK bol upravený tak, aby bežal java-xshare: výpis po prepojení obrázku.

Boli zahrnuté ďalšie možnosti príkazového riadku na doladenie časov haldy zberu odpadu, aby sa zlepšilo rozloženie pamäte pre bežné prípady. Používatelia s pokročilejšími požiadavkami, ako sú napríklad zoznamy vlastných tried, ktoré zahŕňajú triedy aplikácií a rôzne konfigurácie zberu odpadu, si stále môžu vytvoriť vlastný archív CDS.

Znížený počet portov ARM

Java 12 odstraňuje všetky zdroje súvisiace s arm64 port so zachovaním 32-bitovej ARM a 64-bitovej verzie aarch64. Odstránenie tohto portu by prispievateľom umožnilo sústrediť úsilie na jedinú 64-bitovú implementáciu ARM a eliminovať duplicitné práce, ktoré by vyplynuli z údržby dvoch portov. V súčasnosti sú v JDK dva 64-bitové porty ARM.

Prepnúť výrazy

Prepínacie výrazy zjednodušujú kódovanie rozšírením prepínač príkaz, takže ho možno použiť buď ako príkaz, alebo ako výraz. Toto umožňuje príkazom aj výrazom používať „tradičné“ alebo „zjednodušené“ správanie rozsahu a riadenia toku. Tieto zmeny majú za následok jednoduchšie „každodenné“ kódovanie a pripravujú cestu na použitie porovnávania vzorov v systéme prepínač.

Keď sa vývojári Java pohybujú smerom k podpore porovnávania vzorov, nepravidelnosti Javaprepínač vyhlásenie sa stali prekážkami. Patrí medzi ne predvolené správanie toku riadenia blokov spínačov; predvolené určenie rozsahu blokov prepínačov, v ktorých sa blok považuje za jeden jediný rozsah; a prepínač funguje iba ako vyhlásenie. Aktuálny dizajn Java prepínač príkaz dôsledne sleduje jazyky ako C ++ a štandardne podporuje prelomovú sémantiku. Tento riadiaci tok bol užitočný na zápis nízkoúrovňového kódu. Ale keď sa switch používa v kontextoch vyššej úrovne, jeho povaha náchylná na chyby začne prevažovať nad flexibilitou.

Základná referenčná sada

JDK 12 obsahuje základnú sadu minimálnych značiek, ktoré boli pridané do zdrojového kódu platformy. Cieľom je uľahčiť vývojárom vykonávanie existujúcich referenčných hodnôt alebo vytváranie nových.

Návrh balíka microbenchmarks, ktorý bol vytvorený v júli 2014 a aktualizovaný začiatkom novembra 2018, bol podporený Java Microbenchmark Harness (JMH) na vytváranie benchmarkov napísaných v jazyku Java a ďalších jazykoch JVM. Sada je umiestnená so zdrojovým kódom JDK v jednom adresári, takže vývojári môžu ľahko pridávať nové štandardy.

Cieľom nebolo poskytnúť referenčné hodnoty pre nové funkcie JDK alebo vytvoriť kompletnú sadu referenčných hodnôt pokrývajúcich všetko v JDK. Pamätajte tiež, že testovacia sada sa nevyžaduje pre bežné zostavenia JDK, ale je to samostatný cieľ zostavenia.

Návrh požadoval vytvorenie novej stránky na wiki.openjdk.java.net, ktorá by vysvetľovala, ako vyvíjať referenčné hodnoty a popisovať požiadavky. Tieto požiadavky budú vyžadovať dodržiavanie štandardov kódovania, reprodukovateľného výkonu a dokumentácie.

Aktualizácie JDK 12

Plány požadujú, aby JDK 12 dostával dve aktualizácie, a potom o šesť mesiacov vystrieda 13 JDK. JDK 12 je súčasťou šesťmesačného kadencie vydávania Oracle predstavenej s JDK 9 v septembri 2017. JDK 12 je charakterizovaný ako funkčné vydanie, na rozdiel od JDK 11, čo je vydanie s dlhodobou podporou s plánovanou niekoľkoročnou podporou.

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