Java SE 20 kiadás

Hat hónapos fejlesztés után az Oracle kiadta a Java SE 20-et (Java Platform, Standard Edition 20), 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 20 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 20 (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 20 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 20 rendszeres támogatási kiadásként van besorolva, a frissítéseket a következő kiadás előtt kell kiadni. A Long Term Support (LTS) ága a Java SE 17 legyen, amely 2029-ig kap frissítéseket. Emlékezzünk vissza, hogy a Java 10 kiadásától kezdve a projekt új fejlesztési folyamatra váltott, ami rövidebb ciklust jelent az új kiadások kialakításához. Az új funkciók fejlesztése most egy folyamatosan frissített fő ágban történik, amely magában foglalja a már befejezett változtatásokat, és amelyből félévente leágaznak az ágak az új kiadások stabilizálása érdekében.

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

  • Javasolták a Scoped Values ​​előzetes támogatását, amely lehetővé teszi a megváltoztathatatlan adatok megosztását a szálakban és a gyermekszálak közötti hatékony adatcserét (az értékek öröklődnek). A hatályos értékeket a szál-lokális változók mechanizmusának helyettesítésére fejlesztik, és hatékonyabbak nagyon nagyszámú virtuális szál (több ezer és millió szál) használatakor. A fő különbség a Scoped Values ​​és a szálhelyi változók között az, hogy az elsők egyszer íródnak, később nem módosíthatók, és csak a szál végrehajtásának idejére maradnak elérhetők. class Szerver { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(Request request, Response response) { var level = (request. isAuthorized()? ADMIN : VENDÉG); var user = new User(level); ScopedValue.where(CURRENT_USER, user) .run(() -> Application.handle(request, response)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) dob új InvalidUserException(); return new DBConnection(…); } }
  • A rekordminták egy második ideiglenes megvalósítása került hozzáadásra, amely kiterjeszti a Java 16 mintaillesztési képességét a rekordtípus osztályok értékeinek elemzésére. Például: rekord Pont(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • Bekerült a kapcsolókifejezésekben a mintaillesztés negyedik előzetes megvalósítása, amely lehetővé teszi rugalmas sablonok használatát olyan esetcímkék esetében, amelyek egyszerre több értéksorozatot fednek le, amelyekhez korábban nehézkes if...else utasítások láncait használták. static String formatterPatternSwitch(Object obj) { return switch (obj) { 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(); }; }
  • Hozzáadták az FFM (Foreign Function & Memory) API második előzetes megvalósítását, amely lehetővé teszi a Java programok külső kóddal és adatokkal való interakciójának megszervezését a külső könyvtárak függvényeinek meghívásával és a JVM-en kívüli memória elérésével.
  • A virtuális szálak második előzetes megvalósítása került hozzáadásra, amelyek könnyű szálak, amelyek nagymértékben leegyszerűsítik a nagy teljesítményű többszálas alkalmazások írását és karbantartását.
  • A kísérleti Structured Parallelism API második változata hozzáadásra került, hogy leegyszerűsítse a többszálú alkalmazások fejlesztését azáltal, hogy a különböző szálakon futó feladatokat egyetlen egységként kezeli.
  • Hozzáadtuk a Vector API ötödik előzetes megvalósítását, amely olyan vektorszámítási funkciókat biztosít, amelyek vektorutasítások segítségével hajthatók végre az x86_64 és AArch64 processzorokon, és lehetővé teszi a műveletek egyszerre több értékre történő alkalmazását (SIMD). A HotSpot JIT fordítóban a skaláris műveletek autovektorizálásához 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.

Forrás: opennet.ru

Hozzászólás