Publikimi i Java SE 15

Pas gjashtë muajsh zhvillimi, Oracle lëshuar platformë JavaSE 15 (Platforma Java, Standard Edition 15), projekti OpenJDK me burim të hapur përdoret si një zbatim referimi. Java SE 15 ruan përputhshmërinë e prapambetur me versionet e mëparshme të platformës Java; të gjitha projektet e shkruara më parë Java do të funksionojnë pa ndryshime kur të lançohen nën versionin e ri. Ndërtime të gatshme për instalim Java SE 15 (JDK, JRE dhe Server JRE) përgatitur për Linux (x86_64), Windows dhe macOS. Zbatimi i referencës i zhvilluar nga projekti OpenJDK Java 15 është plotësisht me burim të hapur nën licencën GPLv2, me përjashtime të GNU ClassPath që lejojnë lidhjen dinamike me produktet komerciale.

Java SE 15 klasifikohet si një version i përgjithshëm i mbështetjes dhe do të vazhdojë të marrë përditësime deri në versionin tjetër. Dega Long Term Support (LTS) duhet të jetë Java SE 11, e cila do të vazhdojë të marrë përditësime deri në vitin 2026. Dega e mëparshme LTS e Java 8 do të mbështetet deri në dhjetor 2020. Lëshimi tjetër i LTS është planifikuar për në shtator 2021. Ju kujtojmë se duke filluar me lëshimin e Java 10, projekti kaloi në një proces të ri zhvillimi, duke nënkuptuar një cikël më të shkurtër për formimin e versioneve të reja. Funksionaliteti i ri është zhvilluar tani në një degë kryesore të përditësuar vazhdimisht, e cila përfshin ndryshime të gatshme dhe nga e cila degët degëzohen çdo gjashtë muaj për të stabilizuar publikimet e reja.

Nga risitë Java 15 një mund të Mark:

  • I integruar mbështetje për algoritmin e krijimit të nënshkrimit dixhital EdDSA (Edwards-Curve Digital Signature Algorithm) RFC8032). Implementimi i propozuar EdDSA nuk varet nga platformat harduerike, është i mbrojtur nga sulmet e kanalit anësor (sigurohet koha konstante e të gjitha llogaritjeve) dhe është më i shpejtë në performancë sesa zbatimi ekzistues ECDSA i shkruar në gjuhën C, me të njëjtin nivel mbrojtjeje. Për shembull, EdDSA duke përdorur një kurbë eliptike me një çelës 126-bit shfaq performancë të ngjashme me ECDSA me një kurbë eliptike secp256r1 dhe një çelës 128-bit.
  • Shtuar mbështetje eksperimentale për klasat dhe ndërfaqet e mbyllura, të cilat nuk mund të përdoren nga klasa dhe ndërfaqe të tjera për të trashëguar, zgjeruar ose anashkaluar zbatimin. Klasat e mbyllura ofrojnë gjithashtu një mënyrë më deklarative për të kufizuar përdorimin e një superklase sesa modifikuesit e aksesit, bazuar në renditjen e qartë të nënklasave të lejuara për zgjerim.

    paketa com.shembull.gjeometri;

    Forma e klasës së mbyllur publike
    lejet 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 bytekodi i klasave të tjera. Qëllimi kryesor i klasave të fshehura është të përdoret në korniza që gjenerojnë në mënyrë dinamike klasa gjatë ekzekutimit dhe i përdorin ato në mënyrë indirekte, përmes reflektim. Klasa të tilla zakonisht kanë një cikël të kufizuar jetësor, kështu që ruajtja e tyre për akses nga klasat e gjeneruara në mënyrë statike nuk është e justifikuar dhe do të çojë vetëm në rritjen e konsumit të memories. Klasat e fshehura eliminojnë gjithashtu nevojën për API-në jo standarde sun.misc.Unsafe::defineAnonymousClass, e cila është planifikuar të hiqet në të ardhmen.
  • Mbledhësi i mbeturinave ZGC (Z Garbage Collector) është stabilizuar dhe njihet si gati për përdorim të gjerë. ZGC funksionon në modalitetin pasiv, minimizon sa më shumë vonesën për shkak të grumbullimit të mbeturinave (koha e ngecjes kur përdoret ZGC nuk i kalon 10 ms.) dhe mund të punojë me grumbullime të vogla dhe të mëdha, që variojnë në madhësi nga disa qindra megabajt në shumë terabajt.
  • I stabilizuar dhe i gjetur gati për përdorim të përgjithshëm
    mbledhës plehrash Shenandoah, duke punuar me pauza minimale (Low-Pause-Time Garbage Collector). Shenandoah u zhvillua nga Red Hat dhe shquhet për përdorimin e një algoritmi që redukton kohën e ngecjes gjatë mbledhjes së mbeturinave duke kryer pastrimin paralelisht me ekzekutimin e aplikacioneve Java. Madhësia e vonesave të futura nga mbledhësi i plehrave është e parashikueshme dhe nuk varet nga madhësia e grumbullit, d.m.th. për grumbullimet prej 200 MB dhe 200 GB vonesat do të jenë identike (mos dil përtej 50 ms dhe zakonisht brenda 10 ms);

  • Mbështetja është stabilizuar dhe futur në gjuhë blloqe teksti - një formë e re e literaleve të vargjeve që ju lejon të përfshini të dhëna teksti me shumë rreshta në kodin burimor pa përdorur ikjen e karaktereve dhe ruajtjen e formatimit origjinal të tekstit në bllok. Blloku është i përshtatur nga tre thonjëza të dyfishta.

    Për shembull, në vend të kodit

    String html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 është këtu!\" » +
    "\n\t" + " » +
    "\n" + " ";

    ju mund të specifikoni:

    String html = """


    »Java 1\
    është këtu!

    """;

  • E ripunuar API-ja e trashëgimisë DatagramSocket. Implementimet e vjetra të java.net.DatagramSocket dhe java.net.MulticastSocket janë zëvendësuar me një implementim modern që është më i lehtë për tu korrigjuar dhe mirëmbajtur, dhe është gjithashtu i pajtueshëm me rrymat virtuale të zhvilluara brenda projektit tezgjah. Në rast të papajtueshmërisë së mundshme me kodin ekzistues, zbatimi i vjetër nuk është hequr dhe mund të aktivizohet duke përdorur opsionin jdk.net.usePlainDatagramSocketImpl.
  • Zbatimi i dytë eksperimental i propozuar përputhje modeli në operatorin "instanceof", i cili ju lejon të përcaktoni menjëherë një ndryshore lokale për të hyrë në vlerën e kontrolluar. Për shembull, mund të shkruani menjëherë "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" pa përcaktuar në mënyrë eksplicite "String s = (String) obj".

    ishte:

    nëse (obj instance of Group) {
    Grupi grup = (Grupi)obj;
    var entries = group.getEntries();
    }

    Tani mund të bëni pa përkufizimin "Grupi i grupit = (Grupi) obj":

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

  • Sugjeruar zbatimi i dytë eksperimental i fjalës kyçe "rekord", i cili ofron një formë kompakte për përcaktimin e klasave, duke ju lejuar të shmangni përcaktimin në mënyrë eksplicite të metodave të ndryshme të nivelit të ulët siç janë barabartë (), hashCode () dhe toString () në rastet kur të dhënat ruhen vetëm në fusha, sjellja e të cilave nuk ndryshon. Kur një klasë përdor implementime standarde të metodave equals(), hashCode() dhe toString(), ajo mund të bëjë pa përcaktimin e tyre të qartë:

    rekord publik i Transaksionit Bankar (Data Lokale,
    shuma e dyfishtë
    Përshkrimi i vargut) {}

    Kjo deklaratë do të shtojë automatikisht implementime të metodave equals(), hashCode() dhe toString() përveç metodave konstruktor dhe marrës.

  • Propozuar një vrojtim i dytë i API-së së Access-Memory Access, duke i lejuar aplikacionet Java të qasen në mënyrë të sigurt dhe efikase në rajonet e kujtesës jashtë grumbullit të Java duke manipuluar abstraksionet e reja të MemorySegment, MemoryAddress dhe MemoryLayout.
  • I paaftë dhe hodhi poshtë teknikën e optimizimit të bllokimit të njëanshëm të përdorur në HotSpot JVM për të reduktuar shpenzimet e bllokimit. Kjo teknikë ka humbur rëndësinë e saj në sistemet me instruksione atomike të ofruara nga CPU-të moderne dhe është shumë intensive për t'u ruajtur për shkak të kompleksitetit të saj.
  • I shpallur mekanizëm i vjetëruar Aktivizimi RMI, e cila do të hiqet në një version të ardhshëm. Vihet re se Aktivizimi RMI është i vjetëruar, i zbritur në kategorinë e një opsioni në Java 8 dhe pothuajse nuk përdoret kurrë në praktikën moderne.
  • Fshirë Motori JavaScript Nashorn, e cila ishte e vjetëruar në Java SE 11.
  • U hoq porte për procesorët Solaris OS dhe SPARC (Solaris/SPARC, Solaris/x64 dhe Linux/SPARC). Heqja e këtyre porteve do t'i lejojë komunitetit të përshpejtojë zhvillimin e veçorive të reja OpenJDK pa humbur kohë duke ruajtur veçoritë specifike të Solaris dhe SPARC.

Burimi: opennet.ru

Shto një koment