Lëshimi i Java SE 15

Pas gjashtë muajsh zhvillimi, kompania Oracle ka lançuar platformën Java SE 15 (Java Platform, Standard Edition 15), e cila përdor projektin e hapur OpenJDK si implementimin referencë. Në Java SE 15 ruhet përputhshmëria e prapme me versionet e mëparshme të platformës Java, të gjitha projektet Java të shkruara më parë do të funksionojnë pa ndryshime kur ekzekutohen nën menaxhimin e versionit të ri. Ndërtojnë për instalim Java SE 15 (JDK, JRE dhe Server JRE) janë përgatitur për Linux (x86_64), Windows dhe macOS. Implementimi referencë i zhvilluar në kuadër të projektit OpenJDK Java 15 është plotësisht i hapur nën licencën GPLv2 me përjashtime të GNU ClassPath, që lejojnë lidhjen dinamike me produkte komerciale.

Java SE 15 klasifikohet si një lëshim me periudhë të zakonshme mbështetjeje, përditësimet për të do të lëshohen deri në lëshimin e ardhshëm. Si degë me periudhë të gjatë mbështetje (LTS) duhet të përdoret Java SE 11, përditësimet për të do të lëshohen deri në vitin 2026. Degë e kaluar LTS e Java 8 do të mbështetet deri në dhjetor 2020. Lëshimi i ardhshëm LTS pritet të ndodhë në shtator 2021. Kujtojmë se duke filluar nga lëshimi i Java 10, projekti kaloi në një proces të ri zhvillimi, që parashikon një cikël më të shkurtër formimi të lëshimeve të reja. Funksionaliteti i ri tani zhvillohet në një degë master që përditësohet vazhdimisht, në të cilën përfshihen ndryshime tashmë të gatshme dhe nga e cila për çdo gjashtë muaj ndahen dega për stabilizimin e lëshimeve të reja.

Nga novitete Java 15 mund të shënohen:

  • I ndërtuar në mbështetje për algoritmin e krijimit të nënshkrimit digjital EdDSA (Algoritmi i Nënshkrimit Digjital të Kurvës së Edwards RFC 8032). Implementimi i propozuar i EdDSA nuk është i varur nga platforma harduese, është i mbrojtur nga sulmet e kanaleve anësore (sigurohet koha e përhershme e të gjitha llogaritjeve) dhe është më efikas se implementimi ekzistues i ECDSA, i shkruar në gjuhën C, me të njëjtin nivel mbrojtjeje. Për shembuj, EdDSA me përdorimin e një kurve eliptike me çelës 126-bit tregon performancën e ngjashme me ECDSA me kurvën eliptike secp256r1 dhe çelësin 128-bit.
  • Shtuar mbështetje eksperimentale për klasat dhe interface-t e mbyllura («sealed») që nuk mund të përdoren nga klasa dhe interface të tjera për trashëgim, zgjerim ose tejkalim të implementimit. Klasat e mbyllura gjithashtu ofrojnë një metodë më deklarative për të kufizuar përdorimin e superklasës, sesa modifikuesit e qasjes, duke u bazuar në listimin e qartë të nënklasave të lejuara për zgjerim.

    package com.example.geometry;

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

  • Shtuar mbështetje për klasat e fshehta, të cilat nuk mund të përdoren drejtpërdrejt nga kodet e tjera të klasave. Qëllimi kryesor i klasave të fshehta është përdorimi i tyre në kuadër, që gjeneron dinamik klasa gjatë ekzekutimit dhe i përdor ato në mënyrë indirekte, përmes reflektimit.Këto klasa zakonisht kanë një cikël jetese të kufizuar, prandaj mbajtja e tyre për qasje nga klasat që janë gjeneruar statikisht nuk është e arsyeshme dhe do të shkaktonte vetëm rritje të konsumit të memories. Klasa të fshehta gjithashtu lejojnë që të anashkalohen API-të jo standarde sun.misc.Unsafe::defineAnonymousClass, e cila është planifikuar për t'u hequr në të ardhmen.
  • Garbage collector ZGC (Z Garbage Collector) është stabilizuar dhe njohur si i gatshëm për përdorim të gjerë. ZGC punon në mënyrë pasive, duke minimizuar sa më shumë që është e mundur vonesat për shkak të mbledhjes së mbeturinave (koha e ndalimeve gjatë përdorimit të ZGC nuk kalon 10 ms) dhe mund të funksionojë si me grumbuj të vegjël ashtu edhe me grumbuj të mëdhenj, nga disa qindra megabajt deri në shumë terabajt.
  • Stabilizuar dhe njohur si i gatshëm për përdorim të gjerë
    mbledhësi i mbeturinave Shenandoah, që funksionon me një ndalesë minimale (Low-Pause-Time Garbage Collector). Shenandoah është zhvilluar nga Red Hat dhe është i njohur për përdorimin e një algoritmi që redukton kohën e ndalimeve gjatë mbledhjes së mbeturinave duke kryer pastrimin paralelisht me ekzekutimin e aplikacioneve Java. Madhësia e vonesave të shkaktuara nga mbledhësi i mbeturinave është e parashikueshme dhe nuk varet nga madhësia e grumbujve, dmth. për grumbuj prej 200 MB dhe 200 GB, vonesat do të jenë të njëjta (nuk kalojnë 50 ms dhe zakonisht mbeten në 10 ms);
  • Mbështetje për blloqet tekstore është stabilizuar dhe futur në gjuhë — formave të reja të literalëve të vargjeve që lejojnë përfshirjen e të dhënave tekstuale më shumë rreshta në kodin burimor pa nevojën për shenjat e shëndoshura dhe duke ruajtur formatimin origjinal të tekstit në bllok. Kufizimi i bllokut realizohet me tre thonjëza të dyfishta.

    Për shembull, në vend të kodit

    String html = "" +
    "\n\t" + "" +
    "\n\t\t" + "

    \"Java 15 është këtu!\"

    " +
    "\n\t" + "" +
    "\n" + "";

    mund të specifikohet:

    String html = """
    <HTML>
    <BODY>

    \"Java 15\"
    është këtu!"


    </BODY>
    """;

  • Rishikuar API Legacy DatagramSocket. Implementimet e vjetra java.net.DatagramSocket dhe java.net.MulticastSocket janë zëvendësuar me një implementim modern, më të lehtë për debug dhe mirëmbajtje, si dhe të përputhshëm me flukset virtuale që zhvillohen si pjesë e projektit Loom. Në rast të mundshme të shkeljes së përputhshmërisë me kodin ekzistues, implementimi i vjetër nuk është eliminuar dhe mund të aktivizohet përmes opsionit jdk.net.usePlainDatagramSocketImpl.
  • Propozohet një implementim eksperimental i dytë të përputhshmërisë me modelin në operatorin "instanceof", i cili lejon menjëherë të definihet një variabël lokale për të aksesuar vlerën e kontrolluar. Për shembull, mund të shkruhet menjëherë "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" pa nevojën për definimin e qartë "String s = (String) obj."

    Ishte:

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

    Tani mund të kalojmë pa definimin "Group group = (Group) obj":

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

  • Propozohet një implementim eksperimental i dytë i fjalës kyçe "record", duke ofruar një formë kompakte për të përcaktuar klasat, që lejon kalimin pa definimin e qartë të metodave të ndryshme të nivelit të ulët, si equals(), hashCode() dhe toString(), në rastet kur të dhënat ruhet vetëm në fushat, sjellja e të cilave nuk ndryshon. Kur në klasë përdoren implementimet tipike të metodave equals(), hashCode() dhe toString(), mund të kalojmë pa definimin e tyre të qartë:

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

    Kjo deklaratë do të çojë në shtimin automatik të implementimeve të metodave equals(), hashCode() dhe toString() përveç konstruktorit dhe metodave që kontrollojnë ndryshimin e të dhënave (getter).

  • Propozohet versioni e parë e API Foreign-Memory Access, që lejon aplikacionet Java të kenë një qasje të sigurt dhe efektive në fushat e memories jashtë heap-it Java, duke manipuluar abstraksionet e reja MemorySegment, MemoryAddress dhe MemoryLayout.
  • Çaktivizuar dhe e shpallur obsoletë teknika e optimizimit Biased Locking, e përdorur në HotSpot JVM për të zvogëluar kostot e bllokimeve. Kjo teknikë ka humbur relevancën në sistemet me instruksione atomike, të ofruara nga CPU moderne, dhe është tepër e komplikuar për t'u mbajtur për shkak të kompleksitetit të saj.
  • E shpallur obsolet RMI Activation, e cila do të hiqet në një nga lëshimet e ardhshme. Vërehet se RMI Activation është bërë obsolet, e transferuar në kategorinë e opsioneve që nga Java 8 dhe nuk përdoret gati fare në praktikën moderne.
  • Eliminuar motorin JavaScript Nashorn, i cili u shpall obsolet në Java SE 11.
  • Eliminuar portet për OS Solaris dhe procesorët SPARC (Solaris/SPARC, Solaris/x64 dhe Linux/SPARC). Eliminimi i këtyre porteve do t'i lejojë komunitetit të përshpejtojë zhvillimin e mundësive të reja OpenJDK, pa humbur kohë në mbajtjen e veçorive specifike për Solaris dhe SPARC.

Burimi: opennet.ru

Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS 🔥 Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS - ProHoster