Po šesti měsících vývoje společnost Oracle platformu (Java Platform, Standard Edition 15), jehož referenční implementací je otevřený projekt OpenJDK. Java SE 15 zachovává zpětnou kompatibilitu s předchozími verzemi platformy Java, všechny dříve napsané Java projekty bez změn budou funkční na nové verzi. Instalovatelné sestavy Java SE 15 (JDK, JRE a Server JRE) pro Linux (x86_64), Windows a macOS. Referenční implementace vyvinutá v rámci projektu OpenJDK je zcela otevřená pod licencí GPLv2 s výjimkami GNU ClassPath, které umožňují dynamické spojení s komerčními produkty.
Java SE 15 patří do kategorie verzí s běžnou podporou, aktualizace pro něj budou vydávány až do následujícího vydání. Pro dlouhodobou podporu (LTS) je třeba používat Java SE 11, pro kterou budou aktualizace vydávány až do roku 2026. Minulá LTS verze Java 8 bude podporována do prosince 2020. Další LTS vydání je plánováno na září 2021. Připomínáme, že od vydání Java 10 projekt přešel na nový vývojový proces, který zahrnuje kratší cyklus vydávání nových verzí. Nové funkce se nyní vyvíjejí v jedné neustále aktualizované master větvi, do které jsou zahrnuty hotové změny, a jednou za šest měsíců se od ní odvíjejí větve pro stabilizaci nových vydání.
Z :
- podpora algoritmu pro vytváření digitálního podpisu EdDSA (Edwards-Curve Digital Signature Algorithm ). Navržená implementace EdDSA nezávisí na hardwarových platformách, je chráněna před útoky prostřednictvím kanálů (zajištěno konstantní časování všech výpočtů) a co se týče výkonu, předčí stávající implementaci ECDSA napsanou v jazyce C, při stejné úrovni ochrany. Například EdDSA při použití eliptické křivky se 126bitovým klíčem vykazuje výkon srovnatelný s ECDSA s eliptickou křivkou secp256r1 a 128bitovým klíčem.
- experimentální podpora uzavřených („sealed“) tříd a rozhraní, které nemohou být děděny, rozšiřovány ani přepisovány jinými třídami a rozhraními. Uzavřené třídy rovněž poskytují deklarativnější způsob omezení použití nadřazené třídy než modifikátory přístupu, který vychází z výslovného vyjmenování podtříd povolených k rozšíření.
package com.example.geometry;
public sealed class Shape
permits com.example.polar.Circle,
com.example.quad.Rectangle,
com.example.quad.simple.Square {…} - podpora skrytých tříd, které nemohou být používány přímo bytecodem jiných tříd. Klíčovým účelem skrytých tříd je použití ve frameworkách, které dynamicky generují třídy během běhu a používají je nepřímo, prostřednictvím . Takové třídy obvykle mají omezený životní cyklus, proto jejich udržování pro přístup z staticky generovaných tříd není opodstatněné a povede pouze ke zvýšení spotřeby paměti. Skryté třídy také umožňují obejít se bez nestandardního API sun.misc.Unsafe::defineAnonymousClass, které je plánováno na odstranění v budoucnu.
- Stabilizován a uznán za připravený pro široké použití je sběrač odpadu ZGC (Z Garbage Collector). ZGC pracuje v pasivním režimu a snaží se minimalizovat zpoždění způsobená sběrem odpadu (doba zastavení při použití ZGC nepřekračuje 10 ms) a může pracovat jak s malými, tak s obrovskými haldami, jejichž velikost se pohybuje od několika stovek megabajtů po mnohé terabyty.
- Stabilizován a uznán za připravený pro široké použití
sběrač odpadu , fungující s minimálními přestávkami (Low-Pause-Time Garbage Collector). Shenandoah byl navržen společností Red Hat a vyznačuje se použitím algoritmu, který zkracuje dobu zastavení během sběru odpadu tím, že provádí úklid paralelně s provozem Java aplikací. Velikost zpoždění způsobených sběračem odpadu je předvídatelná a nezávislá na velikosti haldy, tj. pro haldy o velikosti 200 MB a 200 GB budou zpoždění stejná ( 50 ms a obvykle se pohybují kolem 10 ms); - Stabilizována a byla zavedena do jazyka podpora — nové formy řetězcových literálů, které umožňují zahrnout do zdrojového kódu vícerozměrná textová data bez potřeby escapování znaků a zachovávají původní formátování textu v bloku. Ohraničení bloku se provádí třemi dvojitými uvozovkami.
Například místo kódu
String html = "<HTML>" +
"\n\t" + "<BODY>" +
"\n\t\t" + "<H1>\"Java 15 is here!\"</H1>" +
"\n\t" + "</BODY>" +
"\n" + "</HTML>";můžete napsat:
String html = """
<HTML>
<BODY>
<H1>"Java 15\
is here!"</H1>
</BODY>
</HTML>"""; - API Legacy DatagramSocket. Starší implementace java.net.DatagramSocket a java.net.MulticastSocket byly nahrazeny moderní implementací, která je jednodušší pro ladění a údržbu a je také kompatibilní s virtuálními vlákny vyvíjenými v rámci projektu. . V případě možné nekompatibility se stávajícím kódem nebyla stará implementace odstraněna a může být aktivována pomocí volby jdk.net.usePlainDatagramSocketImpl.
- Byla navržena druhá experimentální implementace v operatoru „instanceof“, který umožňuje okamžitě určit místní proměnnou pro přístup k ověřené hodnotě. Například je možné okamžitě psát „if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}“ bez explicitního určení „String s = (String) obj“.
Bylo:
if (obj instanceof Group) {
Group group = (Group) obj;
var entries = group.getEntries();
}Nyní se lze obejít bez určení „Group group = (Group) obj“:
if (obj instanceof Group group) {
var entries = group.getEntries();
} - druhá experimentální implementace klíčového slova „«, která poskytuje kompaktní formu pro definici tříd, což umožňuje obejít se bez explicitního určení různých nízkoúrovňových metod, jako jsou equals(), hashCode() a toString() v případech, kdy jsou data uložena pouze v polích a chování práce s nimi se nemění. Když jsou v třídě používány typové implementace metod equals(), hashCode() a toString(), lze se obejít bez jejich explicitního určení:
public record BankTransaction(LocalDate date,
double amount,
String description) {}Toto prohlášení povede k automatickému přidání implementací metod equals(), hashCode() a toString() spolu s konstruktorem a metodami, které kontrolují změnu dat (getter).
- druhý předběžný návrh API Foreign-Memory Access, umožňující Java aplikacím bezpečně a efektivně přistupovat k oblastem paměti mimo haldy Java, manipulací s novými abstrakcemi MemorySegment, MemoryAddress a MemoryLayout.
- a byla prohlášena za zastaralou technika optimalizace Biased Locking, která byla používána v HotSpot JVM za účelem snížení režijních nákladů z důvodu zámků. Tato technika ztratila relevanci na systémech s atomovými instrukcemi poskytovanými moderními CPU a je příliš náročná na údržbu kvůli své složitosti.
- zastaralým mechanismem , který bude odstraněn v jedné z příštích verzí. Všimněte si, že RMI Activation je zastaralý, byl převeden na volbu již v Javě 8 a téměř se nepoužívá v moderní praxi.
- JavaScriptový engine , který byl prohlášen za zastaralý v Javě SE 11.
- porty pro operační systémy Solaris a procesory SPARC (Solaris/SPARC, Solaris/x64 a Linux/SPARC). Odstranění uvedených portů umožní komunitě urychlit vývoj nových funkcí OpenJDK, aniž by se ztrácelo čas na udržování specifických funkcí pro Solaris a SPARC.
Zdroj: opennet.ru
