Izdaja Java SE 15

Po šestih mesecih razvoja je Oracle izpuščen platforma JavaSE 15 (Java Platform, Standard Edition 15), je kot referenčna izvedba uporabljen odprtokodni projekt OpenJDK. Java SE 15 ohranja povratno združljivost s prejšnjimi izdajami platforme Java; vsi predhodno napisani projekti Java bodo ob zagonu pod novo različico delovali brez sprememb. Graditve Java SE 15, pripravljene za namestitev (JDK, JRE in strežnik JRE) pripravljeni za Linux (x86_64), Windows in macOS. Referenčna implementacija, ki jo je razvil projekt OpenJDK Java 15 je popolnoma odprtokoden pod licenco GPLv2, z izjemami GNU ClassPath, ki omogočajo dinamično povezovanje s komercialnimi izdelki.

Java SE 15 je razvrščena kot izdaja splošne podpore in bo prejemala posodobitve do naslednje izdaje. Podružnica dolgoročne podpore (LTS) bi morala biti Java SE 11, ki bo prejemala posodobitve do leta 2026. Prejšnja veja LTS Jave 8 bo podprta do decembra 2020. Naslednja izdaja LTS je predvidena za september 2021. Naj vas spomnimo, da je projekt z izdajo Jave 10 prešel na nov razvojni proces, kar pomeni krajši cikel za oblikovanje novih izdaj. Nova funkcionalnost je zdaj razvita v eni stalno posodobljeni glavni veji, ki vključuje že pripravljene spremembe in iz katere se veje razvejajo vsakih šest mesecev za stabilizacijo novih izdaj.

Od inovacije Java 15 eno lahko znamka:

  • Vgradna podpora za algoritem za ustvarjanje digitalnega podpisa EdDSA (Edwards-Curve Digital Signature Algorithm) RFC 8032). Predlagana izvedba EdDSA ni odvisna od strojne platforme, je zaščitena pred stranskimi napadi (zagotovljen je konstanten čas vseh izračunov) in je hitrejša od obstoječe izvedbe ECDSA, napisane v jeziku C, z enako stopnjo zaščite. Na primer, EdDSA, ki uporablja eliptično krivuljo s 126-bitnim ključem, kaže podobno zmogljivost kot ECDSA z eliptično krivuljo secp256r1 in 128-bitnim ključem.
  • Dodano eksperimentalna podpora za zaprte razrede in vmesnike, ki jih drugi razredi in vmesniki ne morejo uporabiti za podedovanje, razširitev ali preglasitev izvedbe. Zapečateni razredi zagotavljajo tudi bolj deklarativen način za omejevanje uporabe nadrazreda kot modifikatorji dostopa, ki temelji na eksplicitnem seznamu podrazredov, dovoljenih za razširitev.

    paket com.example.geometry;

    javni zapečateni razred Shape
    dovoljuje com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {…}

  • Dodano podpora za skrite razrede, ki jih bajtna koda drugih razredov ne more neposredno uporabiti. Ključni namen skritih razredov je uporaba v ogrodjih, ki dinamično generirajo razrede med izvajanjem in jih uporabljajo posredno prek razmislek. Takšni razredi imajo običajno omejen življenjski cikel, zato njihovo vzdrževanje za dostop iz statično ustvarjenih razredov ni upravičeno in bo povzročilo samo povečano porabo pomnilnika. Skriti razredi prav tako odpravljajo potrebo po nestandardnem API-ju sun.misc.Unsafe::defineAnonymousClass, ki naj bi ga odstranili v prihodnosti.
  • ZGC (Z Garbage Collector) zbiralnik smeti je bil stabiliziran in prepoznan kot pripravljen za široko uporabo. ZGC deluje v pasivnem načinu, čim bolj zmanjša zakasnitev zaradi zbiranja smeti (čas zastoja pri uporabi ZGC ne presega 10 ms.) in lahko deluje tako z majhnimi kot ogromnimi kopicami, ki segajo v velikosti od nekaj sto megabajtov do več terabajtov.
  • Stabilizirano in pripravljeno za splošno uporabo
    zbiralec smeti Shenandoah, ki deluje z minimalnimi premori (Low-Pause-Time Garbage Collector). Shenandoah je razvil Red Hat in je znan po uporabi algoritma, ki skrajša čas zastoja med zbiranjem smeti tako, da izvaja čiščenje vzporedno z izvajanjem aplikacij Java. Velikost zamud, ki jih povzroči zbiralec smeti, je predvidljiva in ni odvisna od velikosti kupa, tj. za kopice 200 MB in 200 GB bodo zakasnitve enake (ne pridi ven več kot 50 ms in običajno znotraj 10 ms);

  • Podpora je bila stabilizirana in uvedena v jezik besedilni bloki - nova oblika literalov nizov, ki vam omogoča, da v izvorno kodo vključite večvrstične besedilne podatke brez uporabe ubežnih znakov in ohranite izvirno oblikovanje besedila v bloku. Blok je uokvirjen s tremi dvojnimi narekovaji.

    Na primer, namesto kode

    Niz html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 je tukaj!\" » +
    "\n\t" + " » +
    "\n" + " ";

    lahko določite:

    Niz html = """


    »Java 1\
    je tukaj!

    """;

  • Predelano Podedovan API DatagramSocket. Stare implementacije java.net.DatagramSocket in java.net.MulticastSocket so bile nadomeščene s sodobno implementacijo, ki je lažja za odpravljanje napak in vzdrževanje ter je tudi združljiva z virtualnimi tokovi, razvitimi v okviru projekta Loom. V primeru morebitne nezdružljivosti z obstoječo kodo stara izvedba ni bila odstranjena in jo je mogoče omogočiti z možnostjo jdk.net.usePlainDatagramSocketImpl.
  • Predlagana druga poskusna izvedba ujemanje vzorcev v operatorju “instanceof”, ki vam omogoča, da takoj definirate lokalno spremenljivko za dostop do preverjene vrednosti. Takoj lahko na primer napišete »if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}«, ne da bi eksplicitno definirali »String s = (String) obj«.

    Bilo je:

    if (obj instanceof Group) {
    Group group = (Group)obj;
    var vnosov = group.getEntries();
    }

    Zdaj lahko storite brez definicije "Group group = (Group) obj":

    if (obj instanceof skupina skupine) {
    var vnosov = group.getEntries();
    }

  • Predlagano druga poskusna implementacija ključne besede "zapis«, ki zagotavlja kompaktno obliko za definiranje razredov, kar vam omogoča, da se izognete eksplicitnemu definiranju različnih nizkonivojskih metod, kot so equals(), hashCode() in toString(), v primerih, ko so podatki shranjeni samo v poljih, katerih vedenje se ne spremeni. Ko razred uporablja standardne izvedbe metod equals(), hashCode() in toString(), lahko brez njihove eksplicitne definicije:

    javni zapis BankTransaction(LocalDate date,
    dvojni znesek
    Opis niza) {}

    Ta deklaracija bo poleg metod konstruktorja in pridobivanja samodejno dodala izvedbe metod equals(), hashCode() in toString().

  • Predlagano drugi predogled API-ja za dostop do zunanjega pomnilnika, ki aplikacijam Java omogoča varen in učinkovit dostop do pomnilniških regij zunaj kopice Java z manipulacijo novih abstrakcij MemorySegment, MemoryAddress in MemoryLayout.
  • Onemogočeno in opustil tehniko optimizacije Biased Locking, ki se uporablja v HotSpot JVM, da bi zmanjšal stroške zaklepanja. Ta tehnika je izgubila svoj pomen v sistemih z atomskimi navodili, ki jih zagotavljajo sodobni procesorji, in je preveč delovno intenzivna za vzdrževanje zaradi svoje kompleksnosti.
  • Objavljeno zastarel mehanizem Aktivacija RMI, ki bo odstranjen v prihodnji izdaji. Opozoriti je treba, da je aktivacija RMI zastarela, potisnjena v kategorijo možnosti v Javi 8 in se skoraj nikoli ne uporablja v sodobni praksi.
  • Izbrisano motor JavaScript Nashorn, ki je bil v Javi SE 11 opuščen.
  • Izbrisano vrata za OS Solaris in procesorje SPARC (Solaris/SPARC, Solaris/x64 in Linux/SPARC). Odstranitev teh vrat bo skupnosti omogočila, da pospeši razvoj novih funkcij OpenJDK, ne da bi izgubljala čas z vzdrževanjem funkcij, specifičnih za Solaris in SPARC.

Vir: opennet.ru

Dodaj komentar