Izdaja Java SE 15.

После шести месяцев разработки компания Oracle je izdalo платформу Java SE 15 (Java Platform, Standard Edition 15), katere referenčna implementacija temelji na odprtem projektu OpenJDK. Java SE 15 ohranja združljivost s prejšnjimi različicami platforme Java, vsi prej napisani Java projekti bodo delovali brez sprememb ob zagonu v novi različici. Vsebniki za namestitev Java SE 15 (JDK, JRE in Server JRE) so pripravljene za Linux (x86_64), Windows in macOS. Referenčna implementacija je bila razvita v okviru projekta OpenJDK Java 15 полностью открыта под лицензией GPLv2 с исключениями GNU ClassPath, разрешающими динамическое связывание с коммерческими продуктами.

Java SE 15 sodi v kategorijo izdaj z običajno podporo, posodobitve pa bodo izhajale do naslednje različice. Za dolgoročno podporo (LTS) je treba uporabiti Java SE 11, posodobitve pa bodo izhajajo do leta 2026. Prejšnja LTS različica Java 8 bo podprta do decembra 2020. Naslednja LTS izdaja je predvidena za september 2021. Opozarjamo, da je od izdaje Java 10 projekt prešel na nov način razvoja, ki predvideva krajši cikel izdaje novih različic. Nova funkcionalnost se zdaj razvija v eni stalno posodobljeni master veji, v katero se vključijo že pripravljene spremembe in od katere se vsake šest mesecev odcepijo veje za stabilizacijo novih izdaj.

Iz novosti Java 15 je možno отметить:

  • Vgrajena podpora za algoritem ustvarjanja digitalnega podpisa EdDSA (Edwards-Curve Digital Signature Algorithm RFC 8032). Predlagana implementacija EdDSA ni odvisna od strojne platforms, je zaščitena pred napadi po stranskih kanalih (zagotovljen je konstanten čas vseh izračunov) in po zmogljivosti presega obstoječo implementacijo ECDSA, napisano v jeziku C, pri istem nivoju zaščite. Na primer, EdDSA z uporabo eliptične krivulje s 126-bitnim ključem dosega zmogljivost, podobno ECDSA z eliptično krivuljo secp256r1 in 128-bitnim ključem.
  • Dodana eksperimentalna podpora za zaprte ('sealed') razrede in vmesnike, ki jih drugi razredi in vmesniki ne morejo uporabljati za dedovanje, razširjanje ali prepisovanje implementacije. Zapečateni razredi zagotavljajo tudi bolj deklarativen način omejevanja uporabe nadrazreda kot dostopni modifikatorji, ki temeljijo na izrecnem naštevanju podrazredov, dovoljenih za razširitev.

    package com.example.geometry;

    public sealed class Shape
    permits com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {…}

  • Dodana podpora skritih razredov, ki jih drugi razredi ne morejo neposredno uporabiti z bajtno kodo. Ključna funkcija skritih razredov je uporaba v ogrodjih, ki med izvajanjem dinamično generirajo razrede in jih uporabljajo posredno, preko odsevanje. Takšni razredi običajno imajo omejeno življenjsko dobo, zato njihovo vzdrževanje za dostop iz statično generiranih razredov ni upravičeno in bo le povečalo porabo pomnilnika. Skriti razredi prav tako omogočajo, da se izognemo nestandardnemu API-ju sun.misc.Unsafe::defineAnonymousClass, ki je predviden za odstranjevanje v prihodnosti.
  • Stabiliziran in priznana kot pripravljena za splošno uporabo je zbiralec odpadkov ZGC (Z Garbage Collector). ZGC deluje v pasivnem načinu, kolikor je mogoče, in minimizira zamude zaradi zbiranja odpadkov (čas zaustavitve pri uporabi ZGC ne presega 10 ms) in lahko deluje tako z majhnimi kot z ogromnimi kupi, velikimi od nekaj sto megabajtov do več terabajtov.
  • Stabiliziran in priznan kot pripravljen za splošno uporabo
    zbiralec odpadkov Shenandoah, ki deluje z minimalnimi prekinitvami (Low-Pause-Time Garbage Collector). Shenandoah je razvila družba Red Hat in se odlikuje po uporabi algoritma, ki skrajša čas prekinitev med zbiranjem odpadkov z izvajanjem čiščenja vzporedno z izvajanjem Java aplikacij. Čas, ki ga povzroča zbiralec odpadkov, je predvidljiv in ni odvisen od velikosti kupa, to pomeni, da bo pri kupih velikih 200 MB in 200 GB čas prekinitev enak (ne presega 50 ms in se običajno giblje okoli 10 ms);
  • Stabilizirana in uvedena v jezik je podpora besedilnim blokom — nova oblika nizov literala, ki omogoča vključitev večvrstičnih besedilnih podatkov v izvorno kodo brez uporabe escapiranja znakov in ohranjanje izvirnega oblikovanja besedila v bloku. Obkrožanje bloka poteka s tremi dvojnih narekovaji.

    Na primer, namesto kode

    String html = "<HTML>" +
    "\n\t" + "<BODY>" +
    "\n\t\t" + "<H1>\"Java 15 is here!\"</H1>" +
    "\n\t" + "</BODY>" +
    "\n" + "</HTML>";

    lahko zapišemo:

    String html = """
    <HTML>
    <BODY>
    <H1>"Java 15\
    is here!"</H1>
    </BODY>
    </HTML>""";

  • Redo API Legacy DatagramSocket. Stare implementacije java.net.DatagramSocket i java.net.MulticastSocket su zamijenjene modernom implementacijom, koja je jednostavnija za debugovanje i održavanje, a također je kompatibilna s virtuelnim nitima razvijenim u okviru projekta. Loom. U slučaju potencijalnog narušavanja kompatibilnosti s postojećim kodom, stara implementacija nije uklonjena i može se aktivirati pomoću opcije jdk.net.usePlainDatagramSocketImpl.
  • Predložena je druga eksperimentalna implementacija uslovnog upoređivanja u operatoru „instanceof“, koji omogućava trenutnu definiciju lokalne promenljive za pristup proverenoj vrednosti. Na primer, može se odmah napisati „if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}“ bez eksplicitne definicije „String s = (String) obj“.

    Bilo je:

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

    Sada se može izbeći definicija „Group group = (Group) obj“:

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

  • Predlagana druga eksperimentalna implementacija ključne reči „record“, koja pruža kompaktni oblik za definisanje klasa, omogućavajući izbegavanje eksplicitne definicije raznih niskonivo metodâ, kao što su equals(), hashCode() i toString(), u slučajevima kada se podaci čuvaju samo u poljima čije se ponašanje ne menja. Kada se u klasi koriste generičke implementacije metoda equals(), hashCode() i toString(), u njoj se može izbeći njihova eksplicitna definicija:

    public record BankTransaction(LocalDate date,
    double amount,
    String description) {}

    Ta oglas bo avtomatsko dodal implementacije metod equals(), hashCode() in toString() poleg konstruktorja in metod, ki nadzorujejo spremembo podatkov (getter).

  • Predlagan drugi preliminarni okvir API za pristup stranoj memoriji, koji omogućava Java aplikacijama da bezbedno i efikasno pristupaju područjima memorije van Java heap-a, manipulišući novim apstrakcijama MemorySegment, MemoryAddress i MemoryLayout.
  • Podpora i je proglašena zastarjelom tehnika optimizacije Biased Locking, koja se primenjivala u HotSpot JVM za smanjenje troškova usled zaključavanja. Ova tehnika je postala zastarjela na sistemima sa atomskim instrukcijama koje pružaju moderni CPU-i i previše je zahtevna za održavanje zbog svoje složenosti.
  • Objavljen zastarjeli mehanizam RMI Activation, koji će biti uklonjen u jednom od narednih izdanja. Napominje se da je RMI Activation zastarjela, prebačena u rang opcije još u Java 8 i gotovo se ne koristi u savremenoj praksi.
  • Odstranjeno JavaScript engine Nashorn, koji je proglašen zastarjelim u Java SE 11.
  • Odstranjeno pristani za OS Solaris in procesorje SPARC (Solaris/SPARC, Solaris/x64 in Linux/SPARC). Odstranitev navedenih pristani bo omogočila skupnosti, da pospeši razvoj novih priložnosti OpenJDK, ne da bi porabila čas za vzdrževanje posebnosti, specifičnih za Solaris in SPARC.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster