A Java SE 17 kiadása

Hat hónapos fejlesztés után az Oracle kiadta a Java SE 17 platformot (Java Platform, Standard Edition 17), amelynek referenciaimplementációjaként az OpenJDK nyílt projektet használják. A Java SE 17 kiadása során néhány elavult funkció eltávolítása mellett megőriztük a korábbi Java-platform verziókkal való visszamenőleges kompatibilitást — a legtöbb korábban megírt Java-projekt változtatás nélkül működni fog az új verzió alatt. A Java SE 17 telepítésre kész kiadásai (JDK, JRE és Server JRE) Linuxra (x86_64, AArch64), Windowsra (x86_64) és macOS-re (x86_64, AArch64) készültek. Az OpenJDK keretein belül kifejlesztett referenciaimplementáció teljes mértékben nyílt forráskódú, GPLv2 licenc alatt, GNU ClassPath kivételekkel, amelyek lehetővé teszik a kereskedelmi termékekkel való dinamikus kötést.

A Java SE 17 a hosszú távú támogatású (LTS) kiadások közé tartozik, amelyhez frissítések 2029-ig fognak érkezni. A Java 16 előző, köztes kiadásához történő frissítések kiadása megszűnt. A korábbi Java 11 LTS ág 2026-ig lesz támogatva. A következő LTS kiadásra 2024 szeptemberében számíthatunk. Emlékeztetünk arra, hogy a Java 10 kiadásával a projekt új fejlesztési folyamatra váltott, amely rövidebb új kiadási ciklust feltételez. Az új funkciók most egy folyamatosan frissülő master ágon fejlődnek, amelybe a már készen álló változtatásokat integrálják, és amelyből hat havonta elágaznak az új kiadások stabilizálására szolgáló ágak.

A Java 17 újításai közül emelhető ki:

  • Kísérleti megvalósítás került javaslatra a "switch" kifejezésben való mintázásra, amely lehetővé teszi, hogy a "case" címkékben ne pontos értékeket, hanem rugalmas mintákat használjunk, amelyek egy sor értéket ölelnek fel, amihez korábban terjedelmes "if…else" kifejezéseket kellett alkalmazni. Ezenkívül a "switch" belsejében lehetőséget biztosítanak a NULL értékek kezelése számára. Object o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
  • Stabilizálva lett a lezárt ("sealed") osztályok és interfészek támogatása, amelyeket más osztályok és interfészek nem használhatnak öröklésre, kiterjesztésre vagy a megvalósítás felülírására. A lezárt osztályok emellett deklaratívabb módot biztosítanak a szuperosztály használatának korlátozására, mint a hozzáférési módosítók, amelyek a kiterjesztéseket engedélyezett alosztályok explicit felsorolásán alapulnak. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Javasolták a második előzetes implementációját a Vector API-nak, amely vektorszámítási funkciókat biztosít, amelyeket az x86_64 és AArch64 processzorok vektoralapú utasításainak felhasználásával végeznek, és lehetővé teszik, hogy egyszerre több értéken hajtsanak végre műveleteket (SIMD). A HotSpot JIT-kompilátor által biztosított skáláris műveletek automatikus vektorizálásával ellentétben az új API lehetővé teszi a vektorizálás explicit irányítását az adat párhuzamos feldolgozása érdekében.
  • Hozzáadták a Foreign Function & Memory API előzetes implementációját, amellyel az alkalmazások interakcióba léphetnek a Java futási időn kívüli kódokkal és adatokkal. Az új API lehetővé teszi, hogy hatékonyan hívjanak meg függvényeket, amelyek nem a JVM-en futnak, és hozzáférjenek a JVM által nem kezelt memóriához. Például hívhatók külső megosztott könyvtárakból származó függvények, és elérhetők a folyamat adatai anélkül, hogy JNI-t használjunk.
  • A macOS számára készült renderelő motor biztosítja a Java 2D API működését, amely a Swing API-ban is felhasználásra kerül, és a Metal grafikus API-ra lett adaptálva. Alapértelmezetten a macOS platformon továbbra is a OpenGL alkalmazása jellemző, a Metal támogatásának engedélyezéséhez a „-Dsun.java2d.metal=true” paramétert kell beállítani, és legalább a macOS 10.14.x verzióra van szükség.
  • Hozzáadtak egy portot a macOS/AArch64 platformra (Apple számítógépek új Apple M1 chipekkel). A port különlegessége a W^X (Write XOR Execute) memória védelmi mechanizmus támogatása, amelyben a memóriablokkok nem lehetnek egyidejűleg írhatóak és futtathatóak. (A kód csak írási tilalom után futtatható, míg a memóriablokkba való írás csak futtatás tilalma után lehetséges.)
  • Visszaállítva a szigorú (strictfp) szemantika használata a lebegőpontos kifejezésekhez. Megszüntették a jav 1.2-es kiadásától kezdődő elérhető „default” szemantika támogatását, amely leegyszerűsítések megvalósítását tette lehetővé nagyon régi x87 matematikai koprocesszorokkal rendelkező rendszerek esetén (az SSE2 utasítások megjelenésével kikerült a további szemantika szükségessége).
  • Új típusú interfészeket valósítottak meg a pszeudo-véletlenszám-generátorokhoz, valamint további algoritmusokat hoztak létre a véletlenszámok jobb generálása érdekében. Az alkalmazások számára lehetőséget adtak a pszeudo-véletlenszám-generálás algoritmusának kiválasztására. Javították a véletlenszerű objektumok generálásának támogatását.
  • Bevezették a JDK összes belső elemének kötelező szigorú kapszulázását, kivéve a kritikus API-kat, mint például a sun.misc.Unsafe. A szigorú kapszulázás megakadályozza a kódok belső osztályokhoz, metódusokhoz és mezőkhöz való hozzáférését. Korábban a szigorú kapszulázási mód letiltható volt az „—illegal-access=permit” opció használatával, de most elavultnak nyilvánították. Azoknak az alkalmazásoknak, amelyeknek hozzáférésre van szükségük a belső osztályokhoz, metódusokhoz és mezőkhöz, kifejezetten meg kell határozniuk őket az „—add-opens” opcióval vagy az Add-Opens attribútummal a manifest fájlban.
  • Az alkalmazások számára lehetőséget biztosítanak adatsorozatok deszerializálására vonatkozó szűrők meghatározására, amelyek a kontextustól függően dinamikusan választhatók ki bizonyos deszerializálási műveletek során. A megadott szűrők érvényesek az egész virtuális gépben (JVM-széles), azaz lefedik nemcsak magát az alkalmazást, hanem a felhasznált harmadik felek könyvtárait is.
  • A Swing frissítve lett a javax.swing.filechooser.FileSystemView.getSystemIcon metódussal, amely lehetővé teszi nagy méretű ikonok letöltését, így javítva a felhasználói felület megjelenését magas pixel sűrűségű (HighDPI) képernyőkön.
  • A java.net.DatagramSocket API-ban megvalósították a multicast csoportokhoz való csatlakozás támogatását anélkül, hogy külön API-t, a java.net.MulticastSocket-ot kellene használni.
  • Javították az IGV (Ideális Grafikon Megjelenítő) eszközt, amely interaktív megjelenítést biztosít a JIT fordító HotSpot VM C2 köztes kódjának vizualizálásához.
  • A JavaDoc-ban a javac fordítóra hasonló módon a hibák jelentésekor most már feltüntetik a hibás sor számát a forrásfájlban és a hiba helyét.
  • Hozzáadva a native.encoding tulajdonság, amely a rendszeres karakterkódolás nevét tükrözi (UTF-8, koi8-r, cp1251 stb.).
  • Hozzáadva a java.time.InstantSource interfész, amely lehetővé teszi az idő manipulálását anélkül, hogy időzónához lenne kötve.
  • Hozzáadva a java.util.HexFormat API a hexadecimális ábrázolásra és onnan való átalakításra.
  • A fordítóhoz hozzáadva a blackhole mód, amely letiltja a nem használt kódok (dead-code elimination) kezelését, ami felhasználható a teljesítményteszteknél.
  • A Runtime-hoz hozzáadva az „-Xlog:async” opció a naplók aszinkron módon történő felvételéhez.
  • A biztonságos kapcsolatok létrehozásakor alapértelmezés szerint a TLS 1.3-at alkalmazzák (korábban a TLS 1.2-t használták).
  • A már korábban bejelentett, elavult Applet API (java.applet.Applet*, javax.swing.JApplet) a törlésre várók kategóriájába került, amely a Java-alkalmazások böngészőben történő futtatására szolgált (azóta elavult a böngészők Java bővítményének támogatásának megszűnése miatt).
  • A Security Manager a törlésre várók kategóriájába került, amely régóta elavult és haszontalan lett a böngésző bővítményének támogatásának megszűnésével.
  • Eltávolítva az RMI Aktiválási mechanizmust, amely elavult, már a Java 8-ban opcióvá vált, és a modern gyakorlatban szinte nem használják.
  • Az SDK-ból eltávolítva az experimentális fordító, amely a JIT (just-in-time) támogatásával dinamikusan fordította a Java kódot a HotSpot JVM számára, valamint az előre fordító (AOT, ahead-of-time) módban a gépi kódra történő osztályok fordítását a virtuális gép indítása előtt. A fordító Java nyelven íródott, és a Graal projekt eredményein alapult. Megjegyzendő, hogy a fordító karbantartása jelentős munkaigénnyel jár, ami nem indokolt a fejlesztők körében.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster