Java SE 16 kiadás

Hat hónapos fejlesztés után az Oracle kiadta a Java SE 16-ot (Java Platform, Standard Edition 16), amely a nyílt forráskódú OpenJDK projektet használja referencia megvalósításként. A Java SE 16 fenntartja a visszamenőleges kompatibilitást a Java platform korábbi kiadásaival; minden korábban írt Java projekt változtatás nélkül fog működni az új verzió alatt. A Java SE 16 (JDK, JRE és Server JRE) telepítésre kész buildjei Linux (x86_64, AArch64), Windows és macOS számára készültek. Az OpenJDK projekt által kifejlesztett Java 16 referenciaimplementáció teljesen nyílt forráskódú a GPLv2 licenc alatt, a GNU ClassPath kivételekkel, amelyek lehetővé teszik a dinamikus összekapcsolást a kereskedelmi termékekkel.

A Java SE 16 általános támogatási kiadásnak minősül, és a következő kiadásig továbbra is kap frissítéseket. A Long Term Support (LTS) ága a Java SE 11 lesz, amely 2026-ig továbbra is kap frissítéseket. A következő LTS kiadás 2021 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.

Az új kiadásra készülve a fejlesztés a Mercurial verzióvezérlő rendszerről a Gitre és a GitHub együttműködési fejlesztői platformra költözött. Az áttelepítés várhatóan javítja a lerakatműveletek teljesítményét, növeli a tárolás hatékonyságát, hozzáférést biztosít a projekt történetében bekövetkezett változásokhoz, javítja a kódellenőrzés támogatását, és lehetővé teszi az API-k számára a munkafolyamatok automatizálását. Ezenkívül a Git és a GitHub használata vonzóbbá teszi a projektet a kezdők és a Githez szokott fejlesztők számára.

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

  • Hozzáadtuk a jdk.incubator.vector kísérleti modult a Vector API megvalósításával, amely funkciókat biztosít az x86_64 és AArch64 processzorokon vektorutasításokkal végrehajtott vektorszámításokhoz, é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 lehetőségekkel ellentétben az új API lehetővé teszi a vektorizálás kifejezetten vezérlését párhuzamos adatfeldolgozáshoz.
  • A C++ nyelven írt JDK és VM HotSpot kódok használhatják a C++14 specifikációban bevezetett funkciókat. Korábban a C++98/03 szabványok megengedettek voltak.
  • A ZGC (Z Garbage Collector), amely passzív üzemmódban működik, és a lehető legkisebbre csökkenti a szemétgyűjtés miatti késéseket, hozzáadta a szálhalmok párhuzamos feldolgozásának lehetőségét az alkalmazási szálak szüneteltetése nélkül. A ZGC-nek már csak felfüggesztést igénylő munkája van, ami állandó, általában nem haladja meg a néhány száz mikroszekundumot késéseket.
  • A Unix socketek (AF_UNIX) támogatása hozzáadva a SocketChannel, ServerSocketChannel és java.nio.channels osztályokhoz.
  • A Linux disztribúció Alpine számára egy portot implementáltak a szabványos C library musl-el, amely népszerű konténerek, mikroszolgáltatások, felhő és beágyazott rendszerek környezetében. Az ilyen környezetekben javasolt port lehetővé teszi a Java programok, mint a hagyományos alkalmazások futtatását. Ezenkívül a jlink használatával eltávolíthatja az összes nem használt modult, és létrehozhat egy minimális környezetet, amely elegendő az alkalmazás futtatásához, amely lehetővé teszi az alkalmazás-specifikus kompakt képek létrehozását.
  • Megvalósult az Elastic Metaspace mechanizmus, amely optimalizálja az osztálymetaadatok (metaspace) által elfoglalt memória lefoglalásának és visszaadásának műveleteit a JVM HotSpotban. Az Elastic Metaspace használata csökkenti a memória töredezettségét, csökkenti az osztálybetöltő többletterhelését, és jótékony hatással van a régóta futó szerveralkalmazások teljesítményére is, mivel a nem használt osztálymetaadatok által elfoglalt memória gyorsabban visszatér az operációs rendszerbe. A memóriafelszabadítási mód kiválasztásához az osztályok kirakodása után a „-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)” opciót ajánljuk fel.
  • Egy JDK port került hozzáadásra az AArch64 architektúrára épülő processzorokkal rendelkező hardveren futó Windows rendszerekhez.
  • Javasolták az Foreign-Memory Access API harmadik előnézetét, amely lehetővé teszi a Java alkalmazások számára, hogy biztonságosan és hatékonyan hozzáférjenek a Java kupon kívüli memóriarégiókhoz az új MemorySegment, MemoryAddress és MemoryLayout absztrakciók manipulálásával.
  • Egy kísérleti Foreign Linker API bevezetésre került, amely hozzáférést biztosít a Java-ról a natív kódhoz. Az Foreign-Memory API-val együtt az új programozási felület sokkal könnyebbé teszi a burkolók létrehozását a hagyományos megosztott könyvtárakon keresztül.
  • Hozzáadtuk a jpackage segédprogramot, amely lehetővé teszi csomagok létrehozását az önálló Java alkalmazásokhoz. A segédprogram a JavaFX javapackagerin alapul, és lehetővé teszi a különböző platformokon natív formátumú csomagok létrehozását (msi és exe Windows, pkg és dmg macOS, deb és rpm Linux esetén). A csomagok minden szükséges függőséget tartalmaznak.
  • Az összes JDK belső elem szigorú beágyazása alapértelmezés szerint engedélyezve van, kivéve a kritikus API-kat, például a sun.misc.Unsafe. A „--illegal-access” opció értéke alapértelmezés szerint „megtagadás”-ra van állítva az „engedély” helyett, ami blokkolja a kódból érkező kísérleteket a legtöbb belső osztályhoz, metódushoz és mezőhöz. A korlátozás megkerüléséhez használja az „-illegal-access=permit” opciót.
  • Stabilizálódott a mintaillesztés megvalósítása az „instanceof” operátorban, amely lehetővé teszi, hogy azonnal definiáljon egy helyi változót, amely az ellenőrzött értékre hivatkozik. Például azonnal beírhatja a következőt: „if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” anélkül, hogy kifejezetten meghatározná a „String s = (String) obj” kifejezést. Was: if (obj instanceof Group) { Group group = (Group) obj; var bejegyzések = group.getEntries(); } Most megteheti a „Csoportcsoport = (Csoport) obj” meghatározása nélkül: if (Obj instanceof Group group) { var entries = group.getEntries(); }
  • A "record" kulcsszó implementációja stabilizálódott, kompakt formát biztosítva az osztálydefiníciókhoz, amely szükségtelenné teszi a különféle alacsony szintű metódusok, például az equals(), a hashCode() és a toString() explicit meghatározását olyan esetekben, amikor adatokat tárolnak. csak mezőkön.amelyekkel nem változik. Ha egy osztály az equals(), hashCode() és toString() metódusok szabványos implementációit használja, megteheti az explicit definíciójuk nélkül is: nyilvános rekord BankTransaction(LocalDate dátum, dupla összeg, Karakterlánc leírása) {}

    Ez a deklaráció automatikusan hozzáadja az equals(), hashCode() és toString() metódusok implementációit a konstruktor és a getter metódusok mellett.

  • A második tervezetet javasoljuk a lezárt osztályok és interfészek számára, amelyeket más osztályok és interfészek nem használhatnak implementációk ö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 {…}

Forrás: opennet.ru

Hozzászólás