Lëshimi i Java SE 15

Pas gjashtë muajsh zhvillimi, kompania Oracle lëshoi 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 prapavepruese me versionet e mëparshme të platformës Java, të gjithë projektet Java të shkruara më parë do të funksionojnë pa ndryshime nën menaxhimin e versionit të ri. Ndërtimet e gatshme për instalim të 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 e hapur nën licencën GPLv2 me përjashtime nga GNU ClassPath, të cilat lejojnë lidhjen dinamike me produkte komerciale.

Java SE 15 i taksonizohet si një lëshim me periudhë mbështetjeje të zakonshme, me përditësime që do të lëshohen deri në lëshimin e ardhshëm. Si degë me periudhë të gjatë mbështetjeje (LTS), duhet të përdoret Java SE 11, përditësimet e të cilit do të lëshohen deri në vitin 2026. Dega e mëparshme LTS e Java 8 do të mbështetet deri në dhjetor 2020. Lëshimi i ardhshëm LTS është planifikuar për shtator 2021. Kujtojmë se që nga lëshimi i Java 10, projekti ka kaluar në një proces të ri zhvillimi, që parashikon një cikël më të shkurtër për formimin e lëshimeve të reja. Funksionaliteti i ri tani zhvillohet në një degë master të përhershme të azhurnuar, në të cilën përfshihen ndryshimet e gatshme dhe nga e cila ndahen degët për stabilizimin e lëshimeve të reja çdo gjashtë muaj.

Nga noviteteve Java 15 mund të shënohen:

  • E ndërtuar mbështetje për algoritmin e krijimit të nënshkrimit digjital EdDSA (Algoritmi i Nënshkrimit Digjital në Edwards-Curve) RFC 8032). Implementimi i propozuar i EdDSA nuk varet nga platformat harduerike, është i mbrojtur nga sulmet përmes kanaleve anësore (këtu sigurohet një kohë e vazhdueshme për të gjitha llogaritë) dhe në përformancë e tejkalon implementimin ekzistues të ECDSA, të shkruar në gjuhën C, me të njëjtin nivel mbrojtjeje. Për shembull, EdDSA me përdorimin e harkut eliptik me çelës 126-bit tregon performancë të ngjashme me ECDSA me hark eliptik secp256r1 dhe çelës 128-bit.
  • Shtuar mbështetje eksperimentale për klasat dhe ndërfaqet e vulosura («sealed»), të cilat nuk mund të përdoren nga klasat dhe ndërfaqet e tjera për trashëgim, zgjerim ose tejkalim të implementimit. Klasa të vulosura gjithashtu ofrojnë një mënyrë më deklarative për të kufizuar përdorimin e supershkallës, sesa modifikatorët e qasjes, duke u bazuar në një listim të qartë të nënklasave që lejohet të zgjerohet.

    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 fshehura që nuk mund të përdoren drejtpërdrejt nga kodet e tjera të klasave. Qëllimi kryesor i klasave të fshehura është përdorimi në korniza që gjenerojnë dinamikisht klasat gjatë ekzekutimit dhe i përdorin ato në mënyrë indirekte, përmes reflektimit. Këto klasa zakonisht kanë një cikël jetësor të kufizuar, prandaj mbajtja e tyre për qasje nga klasat e gjeneruara statikisht nuk justifikohet dhe do të çojë vetëm në rritjen e konsumit të memories. Klasat e fshehura gjithashtu lejojnë shmangien e API-së standarde sun.misc.Unsafe::defineAnonymousClass, e cila është planifikuar për t'u hequr në të ardhmen.
  • Garuesi i plehrave ZGC (Z Garbage Collector) është stabilizuar dhe është njohur si i gatshëm për përdorim të zakonshëm. ZGC punon në një modalitet pasiv që minimizon sa më shumë vonesat për shkak të grumbullimit të plehrave (koha e ndalimit gjatë përdorimit të ZGC nuk e kalon 10 ms.) dhe mund të funksionojë me grumbuj të vegjël, si dhe me ato shumë të mëdha, nga disa qindra megabajt deri në shumë terabajt.
  • Stabilizuar dhe njohur si i gatshëm për përdorim të zakonshëm
    garues plehrash Shenandoah, që funksionon me ndalje minimale (Low-Pause-Time Garbage Collector). Shenandoah është zhvilluar nga Red Hat dhe është veçanërisht i njohur për përdorimin e një algoritmi që redukton kohën e ndaljeve gjatë pastrimit të mbeturinave duke e kryer pastrimin paralelisht me ekzekutimin e aplikacioneve Java. Shuma e ndalesave të sjella nga pastruesi i mbeturinave është e parashikueshme dhe nuk varet nga madhësia e heap-it, pra për heap-e prej 200 MB dhe 200 GB ndalesat do të jenë identike (nuk dalin jashtë 50 ms dhe zakonisht qëndrojnë në 10 ms);
  • E stabilizuar dhe e futur në gjuhë mbështetje e bllokimit tekstual — një formë e re e literalëve të stringjeve, që lejon përfshirjen në kodin burimor të të dhënave tekstuale me shumë rreshta pa përdorimin e karaktereve të ndaluara dhe duke ruajtur formatimin origjinal të tekstit në bllok. Rrethimi i bllokut bëhet me tre thonjëza të dyfishta.

    Për shembull, në vend të kodit

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

    mund të specifikohet:

    String html = """
    <HTML>
    <BODY>
    <H1>"Java 15\
    është këtu!"</H1>
    </BODY>
    </HTML>""";

  • Ristrukturim API Legjendar DatagramSocket. Implementimet e vjetra të java.net.DatagramSocket dhe java.net.MulticastSocket janë zëvendësuar me një implementim më modern, më të thjeshtë për debuggim dhe mirëmbajtje, si dhe përputhshëm me rrjedhat virtuale që zhvillohen në kuadër të projektit. Loom. Për të parandaluar ndonjë shkelje të mundshme të përputhshmërisë me kodin ekzistues, implementimi i vjetër nuk është eliminuar dhe mund të aktivizohet me opsionin jdk.net.usePlainDatagramSocketImpl.
  • Propozohet një realizim i dytë eksperimental përputhjes me modelin në operatorin «instanceof», i cili lejon të përcaktohet menjëherë një variabël lokale për të adresuar vlerën e verifikuar. Për shembull, mund të shkruhet menjëherë «if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}» pa përcaktimin e qartë «String s = (String) obj».

    Ishte:

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

    Tani mund të anashkaloni përcaktimin «Group group = (Group) obj»:

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

  • Propozohet realizimi i dytë eksperimental i fjalës kyçe «record«, ofron një formë kompakte për të përcaktuar klasat, duke lejuar që të shmangen definicionet e qarta të metodave të ndryshme të nivelit të ulët, si equals(), hashCode() dhe toString(), në raste kur të dhënat ruajnë vetëm në fushat, sjellja e punës me të cilat nuk ndryshon. Kur në klasë përdoren implementime tipike të metodave equals(), hashCode() dhe toString(), mund të shmangen definicionet e tyre të qarta:

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

    Ky shpallje 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).

  • Propozuar një variant të dytë paraprak të API-së Foreign-Memory Access, duke lejuar aplikacionet Java të aksesojnë në mënyrë të sigurt dhe të efektshme fusha memorjeje jashtë grumbullit Java, duke manipuluar me abstraksionet e reja MemorySegment, MemoryAddress dhe MemoryLayout.
  • Filtruar dhe teknika e optimizimit Biased Locking, e cila është shpallur e vjetër dhe u përdor në HotSpot JVM për të reduktuar kostot e mbikëqyrjes për shkak të bllokimeve. Kjo teknikë ka humbur rëndësinë në sistemet me komanda atomike, të ofruara nga CPU-të moderne, dhe është shumë e vështirë për t'u mbajtur për shkak të kompleksitetit të saj.
  • Shpallur mekanizmi i vjetër RMI Activation, i cili do të hiqet në një nga versionet e ardhshme. Vërehet se RMI Activation është shpallur i vjetër, është marrë në rangun e opsioneve që nga Java 8 dhe praktikisht nuk përdoret në praktikën moderne.
  • E fshirë motori JavaScript Nashorn, i cili është shpallur i vjetër në Java SE 11.
  • Fshihen portet për sistemin operativ Solaris dhe procesorët SPARC (Solaris/SPARC, Solaris/x64 dhe Linux/SPARC). Heqja e këtyre porteve do t'i lejojë komunitetit të përshpejtojë zhvillimin e mundësive të reja OpenJDK, pa humbur kohën në mbështetje të veçorive specifike për Solaris dhe SPARC.

Burimi: opennet.ru

Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë 🔥 Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë | ProHoster