Programování

JDK 12: Nové funkce v prostředí Java 12

Nyní je k dispozici produkční vydání sady Java Development Kit 12 založené na prostředí Java SE (Standard Edition) 12. Sestavení JDK 12 jsou k dispozici od Oracle pro Linux, Windows a MacOS.

Kde stáhnout JDK 12

JDK 12 si můžete stáhnout z webových stránek Java.net.

Sestavení otevřeného zdroje jsou poskytována pod GNU General Public License v2, s výjimkou Classpath. Komerční sestavení JDK 12 od společnosti Oracle lze nalézt v síti Oracle Technology pod licencí neotevřeného zdroje.

Nové funkce v prostředí Java 12

Sběratel odpadků Shenandoah

Java 12 přidává Shenandoah, experimentální algoritmus sběru odpadu, aby zkrátil doby pauzy sběru odpadu prováděním evakuační práce souběžně se spuštěním vláken Java. Shenandoah poskytuje vhodný algoritmus pro aplikace, které oceňují odezvu a předvídatelné krátké pauzy. Záměrem však není opravit všechny problémy s pozastavením JVM.

Red Hat v současné době podporuje Shenandoah na architekturách Aarch64 a AMD64.

Abortable smíšené kolekce pro G1 garbage collector

Díky Java 12 lze smíšené kolekce G1 zrušit, pokud by mohly překročit cíl pozastavení. Cílem G1 bylo splnit uživatelsky zadaný časový limit pauzy pro jeho pauzy sběru.

Dříve pokročilý analytický modul vybral množství práce, které je třeba provést během kolekce. Výsledkem byla sada oblastí známých jako sada kolekce. Jakmile byla sada určena a sběr zahájen, G1 shromáždil všechny živé objekty v oblastech sbírek ve všech oblastech bez zastavení. To by však mohlo vést k tomu, že G1 překročí cíl pauzy, pokud heuristika aplikace zvolí příliš velkou sadu kolekce.

Byl zapotřebí mechanismus k detekci, když heuristika opakovaně vybrala nesprávné množství práce pro sbírky, a pokud k tomu došlo, aby G1 prováděla sbírkovou práci postupně v krocích, kde by mohla být kolekce po každém kroku přerušena. Mechanismus zavedený v prostředí Java 12 umožňuje G1 častěji plnit cíl doby pauzy.

Okamžitý návrat nevyužité potvrzené paměti

Java 12 vylepšuje G1 tak, aby při nečinnosti automaticky vrátila paměť haldy Java do operačního systému. Tato paměť je uvolněna v rozumném časovém období, kdy je velmi nízká aktivita aplikace.

Dříve G1 vrátila paměť z haldy pouze při úplném uvolnění paměti nebo během souběžného cyklu. Když se G1 snaží vyhnout se úplnému uvolňování paměti, pouze spouští souběžný cyklus založený na obsazenosti haldy a aktivitě alokace, nevrátí haldu paměti v mnoha případech, pokud k tomu nebude nucen externě. Toto chování bylo nevýhodné v prostředích kontejnerů, kde jsou prostředky placeny používáním. I když JVM kvůli nečinnosti používá jen zlomek své přidělené paměti, G1 si zachoval celou hromadu. Zákazníci tedy neustále platili za všechny zdroje a poskytovatelé cloudových služeb nemohli plně využívat jejich hardware.

S Java 12 může JVM detekovat fáze nedostatečného využití haldy a automaticky snížit využití haldy během této doby.

Konstanty JVM API

Toto API modeluje nominální popisy souborů klíčové třídy a artefaktů za běhu, zejména konstant načtených z fondu konstant. Java 12 definuje rodinu hodnotových symbolických referenčních typů v novém balíčku, java.lang.invoke.konstantní, k popisu každého druhu načítatelné konstanty.

V každé třídě Java existují konstantní fondy, které ve třídě ukládají operandy a pokyny bytecode. Položky ve fondu konstant popisují buď běhové artefakty, jako jsou třídy a metody, nebo jednoduché hodnoty, jako jsou řetězce a celá čísla. Tyto položky jsou známé jako načítatelné konstanty.

Programy, které manipulují se soubory tříd, musí modelovat instrukce bajtového kódu a následně načítatelné konstanty. Ale použití standardních typů Java k modelování načítatelných konstant je nedostatečné. To může být přijatelné pro zaváděcí konstantu, která popisuje řetězec, ale pro zaváděcí konstantu, která popisuje třídu, je problematické, protože vytvoření „živého“ Třída objekt spoléhá na správnost a konzistenci načítání třídy. Načítání třídy má však mnoho závislostí na prostředí a režimy selhání.

Programy, které se zabývají načítatelnými konstantami, by tedy mohly být zjednodušeny, pokud by mohly manipulovat s třídami a metodami a méně známými artefakty, jako jsou popisy metod a dynamicky počítané konstanty, v nominální, symbolické podobě. Rozhraní API konstant JVM tedy poskytuje knihovnám a nástrojům jediný standardní způsob popisu načtitelných konstant.

Vylepšené spouštění, CDS a odvoz odpadu

Java 12 vylepšuje proces sestavení JDK tak, aby na 64bitových platformách vygeneroval archiv výchozího sdílení dat třídy (CDS) pomocí seznamu výchozích tříd. Tím se zlepší doba spuštění ihned po vybalení a eliminuje se potřeba spuštění -Xshare: výpis těžit z CDS. Proces sestavování JDK byl upraven tak, aby běžel java-xshare: výpis po propojení obrázku.

Byly zahrnuty další možnosti příkazového řádku k doladění časů haldy uvolňování paměti, aby se zlepšilo rozložení paměti pro běžné případy. Uživatelé s pokročilejšími požadavky, jako jsou seznamy vlastních tříd, které zahrnují třídy aplikací a různé konfigurace uvolňování paměti, si stále mohou vytvořit vlastní archiv CDS.

Snížený počet portů ARM

Java 12 odstraní všechny zdroje související s arm64 port při zachování 32bitové ARM a 64bitové aarch64. Odebrání tohoto portu by přispěvatelům umožnilo soustředit úsilí na jedinou 64bitovou implementaci ARM a eliminovat duplicitní práci, která by vyplynula z údržby dvou portů. V současné době jsou v JDK dva 64bitové porty ARM.

Přepnout výrazy

Přepínací výrazy zjednodušují kódování rozšířením přepínač příkaz, takže jej lze použít buď jako příkaz, nebo jako výraz. To umožňuje jak příkazům, tak výrazům používat „tradiční“ nebo „zjednodušené“ chování rozsahu a řízení toku. Tyto změny vedou k jednoduššímu „každodennímu“ kódování a připravují cestu pro použití porovnávání vzorů přepínač.

Jak stavitelé Java přecházejí na podporu porovnávání vzorů, nepravidelnosti Javypřepínač prohlášení se staly překážkami. Patří mezi ně výchozí chování toku řízení bloků spínačů; výchozí rozsah bloků přepínačů, ve kterých je blok považován za jeden jediný obor; a přepínač pracuje pouze jako prohlášení. Současný design prostředí Java přepínač příkaz pečlivě sleduje jazyky, jako je C ++, a ve výchozím nastavení podporuje sémantiku propadu. Tento řídicí tok byl užitečný pro psaní nízkoúrovňového kódu. Pokud se však přepínač používá v kontextech vyšší úrovně, jeho povaha náchylná k chybám začíná převažovat nad flexibilitou.

Základní srovnávací sada

JDK 12 obsahuje základní sadu mikrobanek, které byly přidány do zdrojového kódu platformy. Cílem je usnadnit vývojářům spouštění stávajících referenčních hodnot nebo vytváření nových.

Návrh sady mikrobenchmarků, vytvořený v červenci 2014 a aktualizovaný začátkem listopadu 2018, byl podpořen vývojovým programem Java Microbenchmark Harness (JMH) pro vytváření referenčních hodnot napsaných v Javě a dalších jazycích JVM. Sada je umístěna se zdrojovým kódem JDK v jediném adresáři, přičemž vývojáři mohou snadno přidávat nová měřítka.

Nebylo cílem poskytnout měřítka pro nové funkce JDK nebo vytvořit kompletní sadu měřítek pokrývající vše v JDK. Mějte také na paměti, že srovnávací sada není vyžadována pro běžné sestavení JDK, ale je samostatným cílem sestavení.

Návrh požadoval vytvoření nové stránky na wiki.openjdk.java.net, která by vysvětlila, jak vyvinout měřítka a popsat požadavky. Tyto požadavky budou vyžadovat dodržování standardů kódování, reprodukovatelného výkonu a dokumentace.

Aktualizace JDK 12

Plány vyžadují, aby JDK 12 obdržel dvě aktualizace, než bude za šest měsíců následován JDK 13. JDK 12 je součástí šestiměsíčního kadence vydání Oracle představeného s JDK 9 v září 2017. JDK 12 je na rozdíl od JDK 11, který je dlouhodobým vydáním podpory s plánovanou podporou několika let, charakterizován jako vydání funkcí.

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