Hat hónapnyi fejlesztés után az Oracle cég platformját (Java Platform, Standard Edition 14), amelynek referenciaimplementációja az OpenJDK nyílt projekt. A Java SE 14 megtartja a visszafelé kompatibilitást a Java platform korábbi kiadásaival, a már megírt Java-projektek változtatás nélküli futtatása lehetséges az új verzió alatt. A Java SE 14 telepíthető csomagjai (JDK, JRE és Server JRE) elérhetők Linuxra (x86_64), Windowsra és macOS-ra. Az OpenJDK projekt keretein belül kifejlesztett referenciaimplementáció teljes mértékben nyílt, GPLv2 licenc alatt, GNU ClassPath kivételekkel, amelyek lehetővé teszik a dinamikus kötést kereskedelmi termékekkel.
A Java SE 14 a normál támogatási ciklusú kiadások közé tartozik, melyekhez frissítések a következő kiadásig fognak érkezni. A hosszú távú támogatási (LTS) ágként a Java SE 11-t kell használni, amelyhez frissítések 2026-ig érkeznek. A korábbi LTS ág, Java 8, 2020 decemberéig lesz támogatva. A következő LTS kiadás tervezett időpontja 2021 szeptember. Ne felejtsük el, hogy a Java 10 kiadástól kezdve a projekt egy új fejlesztési folyamatra váltott, mely rövidebb új kiadási ciklusokat tesz lehetővé. Az új funkcionalitás most egy folyamatosan frissített master ágon fejlődik, amely már kész változtatásokat tartalmaz, és amelyből hat havonta új stabilizáló ágak ágaznak le.
A :
- Kísérleti támogatás került hozzáadásra az "instanceof" operátorban, amely lehetővé teszi egy helyi változó azonnali meghatározását a vizsgált értékhez való hivatkozásra. Például közvetlenül írhatjuk, hogy "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" anélkül, hogy kifejezetten definiálnánk "String s = (String) obj".
Régebben:
if (obj instanceof Group) {
Group group = (Group) obj;
var entries = group.getEntries();
}Most már elkerülhetjük a "Group group = (Group) obj" meghatározását:
if (obj instanceof Group group) {
var entries = group.getEntries();
} - Kísérleti támogatás adódott az új "», amely kompakt formát biztosít az osztályok meghatározásához, lehetővé téve a különböző alacsony szintű metódusok, mint az equals(), hashCode() és toString() kifejezett definiálása nélküli használatot, amikor az adatok csak mezőkben tárolódnak, és a műveletek viselkedése nem változik. Amikor az osztályban a metódusok típuskivitelezései, mint az equals(), hashCode() és toString() használatban vannak, akkor ezek kifejezett definiálása nélkül is működhet az osztály:
public record BankTransaction(LocalDate date,
double amount,
String description) {}Ez a hirdetés automatikus módon hozzáadja az equals(), hashCode() és toString() metódusok megvalósítását a konstruktorhoz és az adatmódosítást vezérlő metódusokhoz (getter).
- és alapértelmezetten támogatja az új «switch» kifejezésformát, amely nem igényli a «break» utasítást, lehetővé téve a megismétlődő címkék egyesítését, és használható nemcsak utasításként, hanem kifejezésként is.
var log = switch (event) {
case PLAY -> «A felhasználó aktiválta a lejátszó gombot»;
case STOP, PAUSE -> «A felhasználónak szünetre van szüksége»;
default -> {
String message = event.toString();
LocalDateTime now = LocalDateTime.now();
yield «Ismeretlen esemény: » + message +
» rögzítve: » + now;
}
}; - Kiterjesztették a kísérleti támogatást — az új típusú szöveges literálokhoz, amelyek lehetővé teszik a több soros szöveges adatok forráskódba történő beillesztését karakterek escape-elése nélkül, megőrizve a blokk szövegének eredeti formátumát. A blokkot három dupla idézőjel határolja. A Java 14-ben a szöveges blokkokban bevezették az escape-sorozat támogatását is, mint a «\s» az egyetlen szóköz meghatározásához, és a «\» a következő sorra történő összekapcsoláshoz (figyelmen kívül hagyva a sortöréseket, amikor nagyon hosszú sort kell kiírni). Például a következő kód helyett:
String html = «<HTML>» +
«\n\t» + «<BODY>» +
«\n\t\t» + «<H1>\»Java 14 itt van!\»<\/H1>» +
«\n\t» + «<\/BODY>» +
«\n» + «<\/HTML>»;lehet megadni:
String html = «»»
<HTML>
<BODY>
<H1>»Java 14\
itt van!»<\/H1>
<\/BODY>
<\/HTML>»»»; - Bővítették a diagnosztikát az kivételek előfordulásakor, . A korábbiakhoz képest, ahol a hibajelzés csak a sor számát hivatkozta, most már részletezi, melyik metodikus hívás okozta a kivételt. A bővített diagnózist csak a «-XX:+ShowCodeDetailsInExceptionMessages» kapcsolóval indítva lehet aktiválni. Például, ha ezt a kapcsolót megadja, a kivétel az alábbi sorban:
var name = user.getLocation().getCity().getName();
kiváltja a következő üzenet kiírását:
Exception in thread «main» java.lang.NullPointerException: Cannot invoke «Location.getCity()»
because the return value of «User.getLocation()» is null
at NullPointerExample.main(NullPointerExample.java:5):5)ami lehetővé teszi, hogy megértsük, hogy a Location.getCity() metódus nem lett meghívva, míg a User.getLocation() visszaadott egy null értéket.
- a jpackage segédprogram előzetes verziója, amely lehetővé teszi a független (self-contained) Java alkalmazások csomagolását. A segédprogram a JavaFX javapackagerjére épül, és lehetővé teszi a csomagok létrehozását különböző platformok natív formátumaiban (msi és exe Windowsra, pkg és dmg macOS-re, deb és rpm Linuxra). A csomagok tartalmazzák az összes szükséges függőséget.
- A G1 szemétgyűjtő új memóriaelosztási mechanizmus, amely figyelembe veszi a nagy rendszerek specifikus működését, amelyek NUMA architektúrát használnak. . Az új memóriaelosztó aktiválása a „+XX:+UseNUMA” kapcsoló segítségével történik, és jelentősen javítja a teljesítményt a NUMA rendszereken.
- API a JFR (JDK Flight Recorder) események valós idejű nyomon követésére, például folyamatos ellenőrzés megszervezésére.
- a jdk.nio.mapmode modul, amely új módokat (READ_ONLY_SYNC, WRITE_ONLY_SYNC) kínál a megjelenített bájtok puffereinek (MappedByteBuffer) létrehozásához, amelyek nem térfogatfüggetlen memóriára (NVM) mutatnak.
- a Foreign-Memory Access API előzetes változata, amely lehetővé teszi a Java alkalmazások számára, hogy biztonságosan és hatékonyan férjenek hozzá a Java heap-en kívüli memória területekhez, manipulálva az új MemorySegment, MemoryAddress és MemoryLayout absztrakciókat.
- elavult portok a Solaris operációs rendszerhez és a SPARC processzorokhoz (Solaris/SPARC, Solaris/x64 és Linux/SPARC) azzal a szándékkal, hogy ezeket a portokat a jövőben eltávolítsák. Az ilyen portok elavulttá nyilvánítása lehetővé teszi a közösség számára, hogy felgyorsítsa az új lehetőségek fejlesztését az OpenJDK-ban, anélkül, hogy időt pazarolna a Solaris és SPARC-specifikus jellemzők fenntartására.
- a CMS (Concurrent Mark Sweep) szemétgyűjtő, amelyet két évvel ezelőtt elavultnak nyilvánítottak, és amelyhez nem nyújtanak támogatást (a CMS-t már régóta felváltotta a G1 szemétgyűjtő). Ezen túlmenően, elavult a párhuzamos gyűjtési algoritmusok kombinációjának használata a ParallelScavenge és SerialOld esetében (a „-XX:+UseParallelGC -XX:-UseParallelOldGC” kapcsolókkal történő futtatás).
- Kísérleti támogatást nyújtottak a ZGC (Z Garbage Collector) szemétgyűjtőhöz a macOS és Windows platformokon (korábban csak Linuxon támogatták). A ZGC passzív módban működik, és a lehető legjobban minimalizálja a szemétgyűjtésből adódó késlekedéseket (a ZGC használata melletti leállási idő nem haladja meg a 10 ms-ot), és képes működni kicsi és hatalmas, több száz megabájttól több terabájtig terjedő heap-eken.
- Eszközkészlet és API JAR-fájlok tömörítésére a Pack200 algoritmus felhasználásával.
Forrás: opennet.ru
