Lëshimi i Java SE 16

Pas seis muajsh zhvillimi, kompania Oracle publikoi platformën Java SE 16 (Java Platform, Standard Edition 16), për të cilën përdoret si realizimi referencë projekti i hapur OpenJDK. Në Java SE 16 është ruajtur përputhshmëria me versionet e kaluara të platformës Java, të gjitha projektet Java të shkrura më parë do të funksionojnë pa ndryshime kur ekzekutohen nën menaxhimin e versionit të ri. Ndërtimet e gatshme për instalim të Java SE 16 (JDK, JRE dhe Server JRE) janë përgatitur për Linux (x86_64, AArch64), Windows dhe macOS. Realizimi referencë i Java 16, i zhvilluar në kuadër të projektit OpenJDK, është plotësisht i hapur nën licencën GPLv2 me përjashtime të GNU ClassPath, duke lejuar lidhjen dinamike me produkte komerciale.

Java SE 16 është klasifikuar në kategorinë e lëshimeve me afat të zakonshëm mbështetjeje, për të cilat do të lëshohen përditësime deri në lëshimin e ardhshëm. Si degë me afat të gjatë mbështetjeje (LTS), duhet të përdoret Java SE 11, përditësimet e të cilës do të lëshohen deri në vitin 2026. 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ë nënkupton 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 ndryshimet e gatshme dhe nga e cila degët për stabilizimin e lëshimeve të reja ndahen çdo gjashtë muaj.

Gjatë përgatitjes së lëshimit të ri, zhvillimi është transferuar nga sistemi i menaxhimit të versioneve Mercurial në Git dhe platformën e zhvillimit bashkëpunues GitHub. Pritet që migrimi të rrisë produktivitetin e operacioneve me repositorinë, të rritë efikasitetin e ruajtjes, të sigurojë qasje në ndryshimet gjatë gjithë historisë së projektit, të përmirësojë mbështetje për rishikimin e kodit dhe të angazhojë API për automatizimin e proceseve të punës. Për më tepër, përdorimi i Git dhe GitHub bën projektin më tërheqës për fillestarët dhe zhvilluesit që janë mësuar me Git.

Nga risitë e Java 16 mund të përmenden:

  • Moduli eksperimental jdk.incubator.vector Ă«shtĂ« shtuar me implementimin e API Vector, i cili ofron funksione pĂ«r llogaritjet vektoriale, tĂ« cilat realizohen duke pĂ«rdorur instrukcionet vektoriale tĂ« procesorĂ«ve x86_64 dhe AArch64, dhe lejojnĂ« aplikimin e operacioneve pĂ«r disa vlera nĂ« tĂ« njĂ«jtĂ«n kohĂ« (SIMD). Ndryshe nga mundĂ«sitĂ« qĂ« ofrohen nĂ« kompilatorin JIT HotSpot pĂ«r avokaturĂ«n automatike tĂ« operacioneve skalarĂ«, API i ri lejon kontrollin e qartĂ« tĂ« vektorizimit pĂ«r pĂ«rpunimin paralel tĂ« tĂ« dhĂ«nave.
  • NĂ« kodin e JDK dhe VM HotSpot, i shkruar nĂ« C++, Ă«shtĂ« lejuar pĂ«rdorimi i mundĂ«sive tĂ« reja qĂ« janĂ« bĂ«rĂ« tĂ« disponueshme nĂ« specifikimin C++14. MĂ« parĂ« ishte e lejueshme pĂ«rdorimi i standardeve C++98/03.
  • NĂ« mbledhĂ«sin e mbetjeve ZGC (Z Garbage Collector), qĂ« funksionon nĂ« modin pasiv dhe redukton sa mĂ« shumĂ« tĂ« jetĂ« e mundur vonesat pĂ«r shkak tĂ« mbledhjes sĂ« mbetjeve, Ă«shtĂ« shtuar mundĂ«sia e pĂ«rpunimit paralel tĂ« stekave tĂ« rrjedhave pa ndĂ«rprerjen e ekzekutimit tĂ« rrjedhave tĂ« aplikacionit. Tani nĂ« ZGC kanĂ« mbetur vetĂ«m ata qĂ« kĂ«rkojnĂ« ndaljen e operimit, tĂ« cilat kanĂ« vonesa tĂ« pĂ«rhershme, zakonisht tĂ« pakta, qĂ« nuk kalojnĂ« disa qindra mikrosekonda.
  • NĂ« klasat SocketChannel, ServerSocketChannel dhe java.nio.channels Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r Unix-sockets (AF_UNIX).
  • ËshtĂ« realizuar njĂ« port pĂ«r distribuimin e Linux Alpine me bibliotekĂ«n standarde C musl, e cila Ă«shtĂ« e njohur nĂ« mjediset pĂ«r konteinerĂ«, mikrosisteme, sisteme cloud dhe tĂ« integruara. Porti i propozuar nĂ« kĂ«to mjedise lejon ekzekutimin e programeve nĂ« Java si aplikacione tĂ« zakonshme. PĂ«r mĂ« tepĂ«r, me ndihmĂ«n e jlink, mund tĂ« hiqen tĂ« gjitha modulat qĂ« nuk pĂ«rdoren dhe tĂ« formohet njĂ« mjedis minimal, i mjaftueshĂ«m pĂ«r tĂ« ekzekutuar aplikacionin, i cili mundĂ«son krijimin e imazheve kompakte specifike pĂ«r aplikacione tĂ« caktuara.
  • ËshtĂ« realizuar mekanizmi Elastic Metaspace, qĂ« optimizon operacionet e alokimit dhe kthimit tĂ« memories, e cila merret nga metadatet e klasave (metaspace) nĂ« JVM HotSpot. PĂ«rdorimi i Elastic Metaspace redukton fragmentimin e memories, ul kostot nĂ« ngarkuesin e klasave, gjithashtu ndikon pozitivisht nĂ« performancĂ«n e aplikacioneve serverike qĂ« ekzekutohen pĂ«r njĂ« periudhĂ« tĂ« gjatĂ« pĂ«rmes kthimit mĂ« tĂ« shpejtĂ« tĂ« memories sĂ« operativĂ«s ndaj sistemit, qĂ« merret nga metadatet e klasave qĂ« nuk pĂ«rdoren. PĂ«r tĂ« zgjedhur mĂ«nyrĂ«n e lirimit tĂ« memories pas shkarkimit tĂ« klasave, Ă«shtĂ« propozuar opsioni "-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)".
  • PĂ«rdorimi i portit JDK Ă«shtĂ« shtuar pĂ«r sistemet Windows qĂ« punojnĂ« me pajisje tĂ« bazuara nĂ« arkitekturĂ«n AArch64.
  • Propozohet njĂ« variant i tretĂ« i parakohshĂ«m i API-sĂ« Foreign-Memory Access, qĂ« lejon aplikacionet Java tĂ« aksesojnĂ« nĂ« mĂ«nyrĂ« tĂ« sigurt dhe efektive zonat e memories jashtĂ« heaps Java duke manipuluar me abstraksionet e reja MemorySegment, MemoryAddress dhe MemoryLayout.
  • APi eksperimental Foreign Linker Ă«shtĂ« realizuar, duke siguruar akses nga Java nĂ« kodin natyror. BashkĂ« me API-nĂ« Foreign-Memory, kjo ndĂ«rfaqe e re e softuerit ndihmon ndjeshĂ«m nĂ« thjeshtimin e krijimit tĂ« mbĂ«shtetjeve mbi bibliotekat e zakonshme tĂ« ndara.
  • NjĂ« utilitet jpackage Ă«shtĂ« shtuar, duke lejuar krijimin e paketave pĂ«r aplikacione autonome Java. Ky utilitet bazohet nĂ« javapackager nga JavaFX dhe lejon formimin e paketave nĂ« formate native pĂ«r platforma tĂ« ndryshme (msi dhe exe pĂ«r Windows, pkg dhe dmg pĂ«r macOS, deb dhe rpm pĂ«r Linux). Paketat pĂ«rfshijnĂ« tĂ« gjitha varĂ«sitĂ« e nevojshme.
  • Inkapcimi i fortĂ« i tĂ« gjithĂ« elementeve tĂ« brendshĂ«m tĂ« JDK Ă«shtĂ« aktivizuar pĂ«r default, pĂ«rveç API-ve kritike, siç janĂ« sun.misc.Unsafe. Vlera e opsionit "—illegal-access" tani Ă«shtĂ« vendosur nĂ« "deny" pĂ«r default nĂ« vend tĂ« "permit", qĂ« do tĂ« çojĂ« nĂ« bllokimin e pĂ«rpjekjeve pĂ«r qasje nĂ« shumicĂ«n e klasave, metodave dhe fushave tĂ« brendshme nga kodi. PĂ«r tĂ« anashkaluar kĂ«tĂ« kufizim, duhen pĂ«rdorur opsionet "—illegal-access=permit".
  • Implementimi i stabilizuar i pĂ«rputhjes me modelin nĂ« operatorin "instanceof" tani lejon pĂ«rcaktimin e menjĂ«hershĂ«m tĂ« 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 pĂ«rcaktuar shprehimisht "String s = (String) obj". Ishte: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Tani mund tĂ« kalojmĂ« pa pĂ«rcaktimin "Group group = (Group) obj": if (obj instanceof Group group) { var entries = group.getEntries(); }
  • Implementimi i stabilizuar i fjalĂ«s kyçe "record" ofron njĂ« formĂ« kompakte pĂ«r tĂ« pĂ«rcaktuar klasat, duke lejuar kalimin pa pĂ«rcaktimin e shprehur tĂ« metodave tĂ« ndryshme tĂ« nivelit tĂ« ulĂ«t, siç janĂ« equals(), hashCode() dhe toString(), kur tĂ« dhĂ«nat ruhen vetĂ«m nĂ« fusha, ku sjellja e punĂ«s me to nuk ndryshon. Kur nĂ« klasĂ« pĂ«rdoren implementimet tipike tĂ« metodave equals(), hashCode() dhe toString(), mund tĂ« kalojmĂ« pa pĂ«rcaktimin e tyre tĂ« shprehur: 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 njĂ« version i dytĂ« paraprak i klasave dhe ndĂ«rfaqeve tĂ« vulosura («sealed»), tĂ« cilat nuk mund tĂ« pĂ«rdoren nga klasat dhe ndĂ«rfaqet e tjera pĂ«r trashĂ«gim, zgjerim ose mbivendosje tĂ« implementimit. Klasat e vulosura gjithashtu ofrojnĂ« njĂ« mĂ«nyrĂ« mĂ« deklarative pĂ«r tĂ« kufizuar pĂ«rdorimin e superklasĂ«s, sesa modifikatorĂ«t e qasjes, duke u bazuar nĂ« njĂ« listĂ« eksplicite 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 {
}

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster