Java SE 15 kiadás

Hat hónapos fejlesztés után az Oracle megjelent felület JavaSE 15 (Java Platform, Standard Edition 15), a nyílt forráskódú OpenJDK projekt referencia megvalósításként használatos. A Java SE 15 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. Telepítésre kész Java SE 15 buildek (JDK, JRE és Server JRE) előkészített Linux (x86_64), Windows és macOS számára. Az OpenJDK projekt által kifejlesztett referencia megvalósítás Java 15 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 15 á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 Java 8 korábbi LTS ága 2020 decemberéig támogatott. 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 ú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.

Of innovációk Java 15 tud jel:

  • Beépített az EdDSA (Edwards-Curve Digital Signature Algorithm) digitális aláírás-létrehozó algoritmus támogatása RFC 8032). A javasolt EdDSA implementáció nem függ hardverplatformoktól, védve van az oldalcsatornás támadásoktól (minden számítás állandó ideje biztosított), teljesítménye pedig gyorsabb, mint a meglévő, C nyelven írt ECDSA implementáció, azonos szintű védelemmel. Például a 126 bites kulccsal rendelkező elliptikus görbét használó EdDSA hasonló teljesítményt mutat, mint a secp256r1 elliptikus görbével és 128 bites kulccsal rendelkező ECDSA.
  • Hozzáadva a lezárt osztályok és interfészek kísérleti 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 Alak
    engedélyezi a com.example.polar.Circle,
    com.example.quad.Téglalap,
    com.example.quad.simple.Square {…}

  • Hozzáadva olyan rejtett osztályok támogatása, amelyeket nem használhat közvetlenül más osztályok bájtkódja. A rejtett osztályok fő célja, hogy olyan keretrendszerekben használhatók, amelyek futás közben dinamikusan generálnak osztályokat, és közvetetten használják őket, visszaverődés. Az ilyen osztályok általában korlátozott életciklusúak, ezért nem indokolt fenntartani őket a statikusan generált osztályokból való eléréshez, és csak megnövekedett memóriafelhasználáshoz vezet. A rejtett osztályok szükségtelenné teszik a nem szabványos API sun.misc.Unsafe::defineAnonymousClass alkalmazását is, amelyet a jövőben eltávolítanak.
  • A ZGC (Z Garbage Collector) szemétgyűjtő stabilizált, és széles körben használható. A ZGC passzív módban működik, a lehető legkisebbre csökkenti a szemétgyűjtés miatti késleltetést (ZGC használatakor a leállási idő nem haladja meg a 10 ms-t), és képes kis és hatalmas kupacokkal is dolgozni, amelyek mérete több száz megabájttól sok terabájtig terjed.
  • Stabilizált és általános használatra készen találtuk
    szemetes Shenandoah, minimális szünetekkel dolgozik (Low-Pause-Time Garbage Collector). A Shenandoah-t a Red Hat fejlesztette ki, és egy olyan algoritmus használatáról nevezetes, amely csökkenti a szemétgyűjtés közbeni leállási időt azáltal, hogy a Java-alkalmazások futtatásával párhuzamosan futtatja a tisztítást. A szemétszállító által bevezetett késések nagysága kiszámítható és nem függ a kupac méretétől, pl. 200 MB és 200 GB halom esetén a késések azonosak lesznek (ne gyere ki 50 ms-on túl és általában 10 ms-on belül);

  • A támogatást stabilizálták és bevezették a nyelvbe szövegblokkok - a karakterlánc-literálok új formája, amely lehetővé teszi többsoros szöveges adatok beillesztését a forráskódba anélkül, hogy karakterkihagyást használna, és megőrizné az eredeti szövegformátumot a blokkban. A blokkot három dupla idézőjel keretezi.

    Például a kód helyett

    String html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Megérkezett a Java 1!\" » +
    "\n\t" + " » +
    "\n" + " ";

    megadhatja:

    Karakterlánc html = """


    »Java 1\
    itt!

    """;

  • Újratervezve Legacy DatagramSocket API. A java.net.DatagramSocket és a java.net.MulticastSocket régi implementációit egy modern implementáció váltotta fel, amely könnyebben hibakereshető és karbantartható, valamint kompatibilis a projektben fejlesztett virtuális adatfolyamokkal is Szövőszék. A meglévő kóddal való esetleges összeférhetetlenség esetén a régi megvalósítást nem távolították el, és a jdk.net.usePlainDatagramSocketImpl opcióval engedélyezhető.
  • Második kísérleti megvalósítás javasolt minta illesztés az „instanceof” operátorban, amely lehetővé teszi egy helyi változó azonnali definiálását az ellenőrzött érték eléréséhez. 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.

    Ez volt:

    if (a csoport objektum példánya) {
    Csoportcsoport = (Csoport)obj;
    var bejegyzések = group.getEntries();
    }

    Most már nélkülözheti a „Csoportcsoport = (Csoport) obj” definíciót:

    if (Obj instanceof Group group) {
    var bejegyzések = group.getEntries();
    }

  • Javasolt a " kulcsszó második kísérleti megvalósításarekord", amely kompakt formát biztosít az osztályok meghatározásához, lehetővé téve, hogy elkerülje 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 az adatok csak olyan mezőkben vannak tárolva, amelyek viselkedése 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:

    nyilvános nyilvántartás BankTransaction(LocalDate dátum,
    dupla mennyiségben
    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.

  • Javasolt az Foreign-Memory Access API második előnézete, 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.
  • Tiltva és megszüntette a HotSpot JVM-ben használt Biased Locking optimalizálási technikát a zárolási többlet csökkentése érdekében. Ez a technika elvesztette jelentőségét a modern CPU-k által biztosított atomutasításokkal rendelkező rendszereken, és bonyolultsága miatt túlságosan munkaigényes a karbantartásához.
  • Bejelentett elavult mechanizmus RMI aktiválás, amelyet egy későbbi kiadásban eltávolítunk. Meg kell jegyezni, hogy az RMI aktiválása elavult, a Java 8 opció kategóriájába tartozik, és a modern gyakorlatban szinte soha nem használják.
  • Törölve JavaScript motor orrszarvú, amely a Java SE 11-ben elavult.
  • Eltávolítva portok Solaris OS és SPARC processzorokhoz (Solaris/SPARC, Solaris/x64 és Linux/SPARC). A portok eltávolítása lehetővé teszi a közösség számára, hogy felgyorsítsa az új OpenJDK-funkciók fejlesztését anélkül, hogy időt veszítene a Solaris és SPARC-specifikus szolgáltatások karbantartására.

Forrás: opennet.ru

Hozzászólás