Vydání Java SE 16

Po šesti měsících vývoje vydal Oracle Java SE 16 (Java Platform, Standard Edition 16), který využívá projekt OpenJDK jako referenční implementaci. Java SE 16 si zachovává zpětnou kompatibilitu s předchozími verzemi platformy Java; všechny dříve napsané Java projekty budou po spuštění v nové verzi fungovat beze změn. Sestavení Java SE 16 (JDK, JRE a Server JRE) připravená k instalaci jsou připravena pro Linux (x86_64, AArch64), Windows a macOS. Referenční implementace Java 16, vyvinutá projektem OpenJDK, je plně open source pod licencí GPLv2, s výjimkami GNU ClassPath, které umožňují dynamické propojení s komerčními produkty.

Java SE 16 je klasifikována jako všeobecná verze podpory a bude i nadále dostávat aktualizace až do příští verze. Pobočka Long Term Support (LTS) by měla být Java SE 11, která bude i nadále dostávat aktualizace až do roku 2026. Další vydání LTS je naplánováno na září 2021. Připomeňme, že počínaje vydáním Javy 10 přešel projekt na nový vývojový proces, což znamená kratší cyklus tvorby nových verzí. Nové funkce jsou nyní vyvíjeny v jedné neustále aktualizované hlavní větvi, která zahrnuje hotové změny a ze které se větve každých šest měsíců rozvětvují, aby se stabilizovala nová vydání.

V rámci přípravy na nové vydání se vývoj přesunul ze systému pro správu verzí Mercurial na Git a platformu pro spolupráci GitHub. Očekává se, že migrace zlepší výkon operací úložiště, zvýší efektivitu úložiště, poskytne přístup ke změnám v celé historii projektu, zlepší podporu pro kontrolu kódu a umožní rozhraním API automatizovat pracovní postupy. Použití Git a GitHub navíc dělá projekt atraktivnějším pro začátečníky a vývojáře zvyklé na Git.

Mezi nové funkce v Javě 16 patří:

  • Přidán experimentální modul jdk.incubator.vector s implementací Vector API, který poskytuje funkce pro vektorové výpočty, které jsou prováděny pomocí vektorových instrukcí na procesorech x86_64 a AArch64 a umožňují současné aplikace operací na více hodnot (SIMD). Na rozdíl od možností, které poskytuje kompilátor HotSpot JIT pro automatickou vektorizaci skalárních operací, umožňuje nové API explicitně řídit vektorizaci pro paralelní zpracování dat.
  • Kód JDK a VM HotSpot napsaný v C++ může používat funkce uvedené ve specifikaci C++14. Dříve byly povoleny standardy C++98/03.
  • ZGC (Z Garbage Collector), který pracuje v pasivním režimu a maximálně minimalizuje zpoždění kvůli shromažďování odpadků, přidal možnost zpracovávat zásobníky vláken paralelně bez pozastavení vláken aplikace. ZGC má nyní pouze práci, která vyžaduje pozastavení, která má konstantní zpoždění, obvykle nepřesahující několik set mikrosekund.
  • Přidána podpora pro Unixové sokety (AF_UNIX) do tříd SocketChannel, ServerSocketChannel a java.nio.channels.
  • Pro linuxovou distribuci Alpine byl implementován port se standardní knihovnou C musl, která je oblíbená v prostředích pro kontejnery, mikroslužby, cloud a embedded systémy. Navrhovaný port v takových prostředích umožňuje spouštět programy Java jako běžné aplikace. Kromě toho můžete pomocí jlink odebrat všechny nepoužívané moduly a vytvořit minimální prostředí dostatečné pro běh aplikace, což vám umožní vytvářet kompaktní obrazy specifické pro aplikaci.
  • Byl implementován mechanismus elastického metaprostoru, který optimalizuje operace přidělování a vracení paměti obsazené metadaty třídy (metaprostorem) v JVM HotSpot. Použití Elastic Metaspace snižuje fragmentaci paměti, snižuje režii zavaděče třídy a má také příznivý vliv na výkon dlouho běžících serverových aplikací díky rychlejšímu návratu paměti obsazené nevyužitými metadaty tříd do operačního systému. Chcete-li vybrat režim uvolnění paměti po uvolnění tříd, nabízí se volba „-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)“.
  • Pro systémy Windows běžící na hardwaru s procesory založenými na architektuře AArch64 byl přidán port JDK.
  • Byl navržen třetí náhled rozhraní Foreign-Memory Access API, který umožňuje aplikacím Java bezpečně a efektivně přistupovat k oblastem paměti mimo haldu Java manipulací s novými abstrakcemi MemorySegment, MemoryAddress a MemoryLayout.
  • Bylo implementováno experimentální rozhraní Foreign Linker API, které poskytuje přístup z Javy k nativnímu kódu. Spolu s rozhraním Foreign-Memory API umožňuje nové programovací rozhraní mnohem snadněji vytvářet obaly nad konvenčními sdílenými knihovnami.
  • Přidán obslužný program jpackage, který umožňuje vytvářet balíčky pro samostatné aplikace Java. Nástroj je založen na javapackager od JavaFX a umožňuje vytvářet balíčky ve formátech nativních pro různé platformy (msi a exe pro Windows, pkg a dmg pro macOS, deb a rpm pro Linux). Balíčky obsahují všechny požadované závislosti.
  • Ve výchozím nastavení je povoleno přísné zapouzdření všech vnitřních částí JDK, s výjimkou kritických rozhraní API, jako je sun.misc.Unsafe. Hodnota možnosti „--ilegal-access“ je nyní ve výchozím nastavení nastavena na „deny“ namísto „permit“, což blokuje pokusy kódu o přístup k většině interních tříd, metod a polí. Chcete-li omezení obejít, použijte volbu „-ilegal-access=permit“.
  • Implementace porovnávání vzorů v operátoru „instanceof“ byla stabilizována, což umožňuje okamžitě definovat lokální proměnnou odkazující na kontrolovanou hodnotu. Můžete například okamžitě napsat „if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}“, aniž byste explicitně definovali „String s = (String) obj“. Was: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Nyní se můžete obejít bez definování “Skupina skupiny = (Skupina) obj”: if (obj instanceof Skupina skupiny) { var entries = group.getEntries(); }
  • Implementace klíčového slova „record“ byla stabilizována a poskytuje kompaktní formu pro definice tříd, která eliminuje potřebu explicitně definovat různé nízkoúrovňové metody, jako je equals(), hashCode() a toString() v případech, kdy jsou data uložena. pouze v polích.se kterými se nemění. Když třída používá standardní implementace metod equals(), hashCode() a toString(), obejde se bez jejich explicitní definice: veřejný záznam BankTransaction(LocalDate date, double number, String description) {}

    Tato deklarace automaticky přidá implementace metod equals(), hashCode() a toString() kromě metod konstruktoru a getteru.

  • Druhý návrh je navržen pro uzavřené třídy a rozhraní, které nemohou být použity jinými třídami a rozhraními k dědění, rozšiřování nebo přepisování implementací. Zapečetěné třídy také poskytují deklarativnější způsob, jak omezit použití nadtřídy než modifikátory přístupu, na základě explicitního výpisu podtříd povolených pro rozšíření. balíček com.example.geometrie; veřejná uzavřená třída Tvar umožňuje com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.čtverec {…}

Zdroj: opennet.ru

Přidat komentář