Po šesti měsících vývoje společnost Oracle platformu (Java Platform, Standard Edition 14), jehož referenční implementací je open-source projekt OpenJDK. Java SE 14 zachovává zpětnou kompatibilitu s předchozími verzemi platformy Java, všechny předtím napsané projekty v Javě budou bez úprav funkční na nové verzi. K dispozici jsou sestavení Java SE 14 (JDK, JRE a Server JRE) ke stažení. 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 14 je klasifikována jako verze s pravidelnou podporou, aktualizace pro tuto verzi budou vydávány do dalšího vydání. Pro dlouhodobou podporu (LTS) je doporučeno používat Java SE 11, pro kterou budou aktualizace vydávány do roku 2026. Předchozí 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 přešel projekt na nový vývojový cyklus, který předpokládá kratší dobu mezi novými vydáními. Nové funkce se nyní vyvíjejí v jedné neustále aktualizované master větvi, která zahrnuje připravené změny a z níž se každých šest měsíců odcházejí větve pro stabilizaci nových vydání.
Z :
- Byla přidána experimentální podpora 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();
} - Byla přidána experimentální podpora nového 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).
- a byla implicitně zahrnuta podpora nové formy výrazů „switch“, která nevyžaduje použití příkazového „break“, umožňující kombinaci opakujících se označení a použití nejen jako příkazu, ale i jako výrazu.
var log = switch (event) {
case PLAY -> „Uživatel aktivoval tlačítko přehrávání“;
case STOP, PAUSE -> „Uživatel potřebuje přestávku“;
default -> {
String message = event.toString();
LocalDateTime now = LocalDateTime.now();
yield „Neznámá událost“ + message +
„ zaznamenána v „ + now;
}
}; - Byla rozšířena experimentální podpora — nové formy řetězcových literálů, které umožňují zahrnout v zdrojovém kódu vícero řádkové textové údaje bez použití escape sekvencí a uchovávají původní formátování textu v bloku. Blok je ohraničen třemi dvojitými uvozovkami. V Java 14 je v textových blocích implementována podpora escape sekvence „\s“ pro definici jednoho mezery a „\“ pro spojení se následujícím řádkem (ignorování nového řádku, když je třeba vypsat velmi dlouhý řádek). Například, místo kódu
String html = "<HTML>" +
"\n\t" + "<BODY>" +
„\n\t\t“ + „„Java 14 is here!„
“ +
"\n\t" + "</BODY>" +
"\n" + "</HTML>";můžete napsat:
String html = """
<HTML>
<BODY>„Java 14
is here!"</H1>
</BODY>
</HTML>"""; - Byla rozšířena informativnost diagnostiky při výskytu výjimek . Zatímco dříve chybová zpráva odkazovala pouze na číslo řádku, nyní podrobně popisuje, který z metod způsobil výjimku. Rozšířená diagnostika je zatím aktivována pouze při spuštění s příznakem «-XX:+ShowCodeDetailsInExceptionMessages». Například při uvedení tohoto příznaku výjimka ve řádku
var name = user.getLocation().getCity().getName();
povede k vypsání zprávy
Exception in thread «main» java.lang.NullPointerException: Cannot invoke «Location.getCity()»
protože návratová hodnota «User.getLocation()» je null
at NullPointerExample.main(NullPointerExample.java:5):5)což umožňuje pochopit, že metoda Location.getCity() nebyla volána, a User.getLocation() vrátila hodnotu null.
- předběžná verze nástroje jpackage, který umožňuje vytvářet balíčky pro samostatné (self-contained) Java aplikace. Nástroj je založen na javapackager z JavaFX a umožňuje vytvářet balíčky ve formátech, které jsou vlastní různým platformám (msi a exe pro Windows, pkg a dmg pro macOS, deb a rpm pro Linux). Balíčky zahrnují všechny potřebné závislosti.
- V garbage collector G1 nový mechanismus distribuce paměti, který zohledňuje specifika práce na velkých systémech využívajících architekturu . Nový distributor paměti se aktivuje pomocí příznaku «+XX:+UseNUMA» a umožňuje výrazně zvýšit výkon na NUMA systémech.
- API pro sledování událostí v reálném čase JFR (JDK Flight Recorder), například pro organizaci nepřetržitého monitorování.
- modul jdk.nio.mapmode, nabízející nové režimy (READ_ONLY_SYNC, WRITE_ONLY_SYNC) pro vytváření mapovaných bajtových bufferů (MappedByteBuffer), odkazujících na nevolatilní paměť (NVM).
- předběžná verze API Foreign-Memory Access, umožňující Java aplikacím bezpečně a efektivně přistupovat k oblastem paměti mimo Java haldu, manipulující s novými abstrakcemi MemorySegment, MemoryAddress a MemoryLayout.
- zastaralé porty pro OS Solaris a procesory SPARC (Solaris/SPARC, Solaris/x64 a Linux/SPARC) s úmyslem tyto porty v budoucnu odstranit. Převedení uvedených portů do kategorie zastaralých umožní komunitě urychlit vývoj nových funkcí OpenJDK, aniž by musela ztrácet čas na údržbu aspektů specifických pro Solaris a SPARC.
- garbage collector CMS (Concurrent Mark Sweep), který byl před dvěma lety označen za zastaralý a zůstal bez podpory (na jeho místo už dávno nastoupil garbage collector G1). Kromě toho, zastaralé použití kombinace algoritmů pro sběr odpadu ParallelScavenge a SerialOld (spuštění s možnostmi „-XX:+UseParallelGC -XX:-UseParallelOldGC“).
- Byla zajištěna experimentální podpora sběrače odpadu ZGC (Z Garbage Collector) na platformách macOS a Windows (dříve byl podporován pouze v Linuxu). ZGC funguje v pasivním režimu a co nejvíce minimalizuje zpoždění způsobená sběrem odpadu (čas zastavení při použití ZGC nepřesahuje 10 ms) a může pracovat jak s malými, tak s obrovskými haldami o velikosti od několika stovek megabajtů až po několik terabajtů.
- nástroje a API pro kompresi JAR souborů pomocí algoritmu Pack200.
Zdroj: opennet.ru
