Java SE 17 kiadás

Hat hónapos fejlesztés után az Oracle kiadta a Java SE 17-et (Java Platform, Standard Edition 17), amely az OpenJDK nyílt forráskódú projektet használja referencia megvalósításként. Néhány elavult szolgáltatás eltávolítása kivételével a Java SE 17 fenntartja a visszamenőleges kompatibilitást a Java platform korábbi kiadásaival – a legtöbb korábban írt Java projekt továbbra is módosítás nélkül működik az új verzió alatt. A Java SE 17 (JDK, JRE és Server JRE) telepíthető buildjei Linux (x86_64, AArch64), Windows (x86_64) és macOS (x86_64, AArch64) számára készültek. Az OpenJDK projekt által kifejlesztett Java 17 referenciaimplementáció teljesen nyitott a GPLv2 licenc alatt, GNU ClassPath kivételekkel, hogy lehetővé tegye a kereskedelmi termékekhez való dinamikus hivatkozást.

A Java SE 17 a Long Term Support (LTS) kiadásnak minősül, amely 2029-ig továbbra is frissítéseket kap. Az előző Java 16 mérföldkő kiadás frissítései megszűntek. A Java 11 korábbi LTS ága 2026-ig lesz támogatott. A következő LTS kiadás 2024 szeptemberére várható. Emlékeztetünk arra, hogy a Java 10 megjelenésétől kezdve a projekt egy új fejlesztési folyamatra váltott, ami rövidebb ciklust jelent az új kiadások kialakításához. Az új funkciókat most egyetlen folyamatosan frissített fő ágban fejlesztették ki, amely kész változtatásokat tartalmaz, és amelyből félévente elágaznak az ágak az új kiadások stabilizálása érdekében.

A Java 17 új funkciói a következők:

  • Javasoljuk a mintaillesztés kísérleti megvalósítását a „switch” kifejezésekben, amely lehetővé teszi nem pontos értékek használatát a „case” címkékben, hanem rugalmas sablonokat, amelyek egyszerre fednek le egy értéksorozatot, amelyhez korábban nehézkes volt. „ha... másként” kifejezések láncai. Ezenkívül a „switch” képes kezelni a NULL értékeket. o objektum = 123L; String formázott = 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); alapértelmezett -> o.toString(); };
  • A lezárt osztályok és interfészek stabilizált támogatása, amelyeket más osztályok és interfészek nem használhatnak a megvalósítás öröklésére, kiterjesztésére vagy felülbírálására. A lezárt osztályok deklaratívabb módot is kínálnak a szuperosztályok használatának korlátozására, mint a hozzáférés-módosítók, mivel kifejezetten felsorolják a kiterjeszthető alosztályokat. csomag com.example.geometry; nyilvános lezárt osztály Az alak megengedi a com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Javasoljuk a Vector API második előnézetét, amely funkciókat biztosít a vektorszámításokhoz, amelyeket vektorutasítások segítségével hajtanak végre x86_64 és AArch64 processzorokon, és lehetővé teszi a műveletek egyidejű alkalmazását több értékre (SIMD). A HotSpot JIT fordítóban a skalárműveletek automatikus vektorizálására biztosított képességekkel ellentétben az új API lehetővé teszi a vektorizálás explicit vezérlését párhuzamos adatfeldolgozáshoz.
  • Hozzáadott egy előnézetet a Foreign Function & Memory API-hoz, amely lehetővé teszi az alkalmazások számára, hogy a Java futási környezeten kívül kommunikáljanak kóddal és adatokkal. Az új API lehetővé teszi a nem JVM függvények hatékony meghívását és a nem JVM által kezelt memória elérését. Például meghívhat függvényeket külső megosztott könyvtárakból, és hozzáférhet a folyamatadatokhoz a JNI használata nélkül.
  • A Java 2D API-t működtető macOS renderelő motort, amely viszont a Swing API-t működteti, a Metal grafikus API használatára lett igazítva. A macOS platform alapértelmezés szerint továbbra is OpenGL-t használ, és a Metal támogatás engedélyezéséhez a „-Dsun.java2d.metal=true” beállítást és legalább a macOS 10.14.x-et kell futtatni.
  • Hozzáadott egy portot a macOS/AArch64 platformhoz (az új Apple M1 chipeken alapuló Apple számítógépek). A port különlegessége a W^X (Write XOR Execute) memóriavédelmi mechanizmus támogatása, amelyben a memórialapokhoz nem lehet egyszerre hozzáférni íráshoz és végrehajtáshoz. (a kód csak az írás letiltása után hajtható végre, és a memórialapra írás csak a végrehajtás letiltása után lehetséges).
  • Visszatérés a szigorúfp szemantika használatához a lebegőpontos kifejezésekhez. A Java 1.2 megjelenése óta elérhető „alapértelmezett” szemantika támogatása megszűnt, beleértve a nagyon régi x87 matematikai társprocesszorokkal végzett rendszereken végzett munka egyszerűsítését (az SSE2 utasítások megjelenése után megszűnt a további szemantika szükségessége).
  • Új típusú interfészeket valósítottak meg az álvéletlen számgenerátorokhoz, és további algoritmusokat valósítottak meg a véletlen számok jobb generálására. Az alkalmazások lehetőséget kapnak az álvéletlen számok generálására szolgáló algoritmus kiválasztására. Továbbfejlesztett támogatás véletlenszerű objektumfolyamok generálásához.
  • Az összes JDK belső elem szigorú beágyazása kényszerített, a kritikus API-k kivételével, például a sun.misc.Unsafe. A szigorú beágyazás blokkolja a kódból a belső osztályokhoz, metódusokhoz és mezőkhöz való hozzáférési kísérleteket. Korábban a szigorú beágyazási módot le lehetett tiltani a "--illegal-access=permit" opcióval, de ez már elavult. A belső osztályokhoz, metódusokhoz és mezőkhöz való hozzáférést igénylő alkalmazásoknak kifejezetten meg kell határozniuk azokat az --add-opens kapcsolóval vagy a jegyzékfájl Add-Opens attribútumával.
  • Az alkalmazások lehetőséget kapnak adatszerializációs szűrők definiálására, amelyek környezetérzékenyek és dinamikusan kiválaszthatók az adott deszerializálási műveletek alapján. A megadott szűrők a teljes virtuális gépre (JVM-szerte) alkalmazhatók, pl. nem csak magát az alkalmazást fedi le, hanem az alkalmazásban használt harmadik féltől származó könyvtárakat is.
  • A Swing hozzáadta a javax.swing.filechooser.FileSystemView.getSystemIcon metódust a nagy ikonok betöltéséhez, hogy javítsa a felhasználói felületet a nagy DPI-s képernyőkön.
  • A java.net.DatagramSocket API támogatja a Multicast csoportokhoz való csatlakozást anélkül, hogy külön java.net.MulticastSocket API-ra lenne szükség.
  • Továbbfejlesztették az IGV (Ideal Graph Visualizer) segédprogramot, amely interaktív megjelenítést biztosít a közbenső kódmegjelenítésről a HotSpot VM C2 JIT fordítóban.
  • A JavaDoc programban, a javac fordítóval analóg módon, amikor hiba jelenik meg, a forrásfájlban a problémás sor száma és a hiba helye jelenik meg.
  • Hozzáadtuk a native.encoding tulajdonságot, amely tükrözi a rendszer karakterkódolásának nevét (UTF-8, koi8-r, cp1251 stb.).
  • A java.time.InstantSource felület hozzáadásra került, amely lehetővé teszi az időkezelést időzónára való hivatkozás nélkül.
  • Hozzáadott java.util.HexFormat API a hexadecimális ábrázolásra való konvertáláshoz és fordítva.
  • A fordítóhoz egy feketelyuk mód került, amely letiltja a holtkód-eltávolító műveleteket, amelyeket teljesítménytesztek végzésekor lehet használni.
  • A „-Xlog:async” opció hozzáadva a Runtime-hoz a naplók aszinkron módban történő rögzítéséhez.
  • Biztonságos kapcsolatok létesítésekor a TLS 1.3 alapértelmezés szerint engedélyezve van (korábban a TLS 1.2-t használták).
  • A korábban elavultnak nyilvánított Applet API (java.applet.Applet*, javax.swing.JApplet), amelyet Java alkalmazások futtatására használtak a böngészőben, átkerült az eltávolítani kívánt kategóriába (a támogatás megszűnése után elvesztette relevanciáját). a Java beépülő modulhoz böngészőkhöz).
  • A Security Manager, amely már régen elvesztette relevanciáját, és a böngészőbővítmény támogatásának megszűnése után kiderült, hogy nem igényelték, az eltávolításra tervezettek kategóriájába került.
  • Eltávolították az RMI aktiválási mechanizmust, amely elavult, a Java 8-ban az opciók kategóriájába került, és a modern gyakorlatban szinte soha nem használják.
  • Kísérleti fordító, amely támogatja a JIT-t (just-in-time) a HotSpot JVM Java-kódjának dinamikus fordításához, valamint az osztályok gépi kódba történő előre fordításának módját (AOT, idő előtt) a virtuális gép elindítása előtt. , eltávolítva az SDK-ból. A fordítóprogram Java nyelven készült, és a Graal projekt munkája alapján készült. Megjegyzendő, hogy a fordítóprogram karbantartása sok munkát igényel, ami nem indokolt, ha nincs igény a fejlesztők részéről.

Forrás: opennet.ru

Hozzászólás