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

Bleni hostin e besueshĂ«m pĂ«r faqet me mbrojtje nga DDoS, VPS VDS servera đŸ”„ Bli hostin e besueshĂ«m pĂ«r faqet me mbrojtje nga DDoS, VPS VDS servera | ProHoster