Lëshimi i Java SE 16

Pas pas gjashtë muajsh zhvillimi, kompania Oracle publikoi platformën Java SE 16 (Java Platform, Standard Edition 16), për realizimin e së cilës përdoret projekti i hapur OpenJDK. Në Java SE 16 ruhet mbështetje prapambetje për versionet e kaluara të platformës Java, të gjitha projektet e mëparshme të Java do të funksionojnë pa ndryshime 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, të cilat lejojnë lidhje dinamike me produkte komerciale.

Java SE 16 i përket kategorisë së lirimeve me mbështetje standarde, azhurnimet për të cilin do të publikohen deri në lëshimin e ardhshëm. Si një degë me mbështetje të zgjeruar (LTS) rekomandohet Java SE 11, azhurnimet për të cilin do të publikohen deri në vitin 2026. Lirimi i ardhshëm LTS është parashikuar për në shtator 2021. Kujtojmë se që nga lëshimi i Java 10, projekti ka kaluar në një proces të ri zhvillimi, që përfshin një cikël më të shkurtër për formimin e lirimeve 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 prej së cilës ndahen degë për stabilizimin e lëshimeve të reja çdo gjashtë muaj.

Në përgatitjen e lëshimit të ri, zhvillimi është transferuar nga sistemi i menaxhimit të versioneve Mercurial në Git dhe platformën e bashkëpunimit GitHub. Pritet që migrimi të rritë performancën e operacioneve me repositorin, të rrisë efikasitetin e ruajtjes, të sigurojë akses në ndryshimet për të gjithë historinë e projektit, të përmirësojë mbështetje për rishikimin e kodit dhe të angazhojë API për automatizimin e proceseve. Për më tepër, përdorimi i Git dhe GitHub e 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ë theksohet:

  • Shtohet moduli eksperimental jdk.incubator.vector me implementimin e API Vector, që ofron funksione për llogaritjet vektoriale, të cilat kryhen duke përdorur instrukcionet vektoriale të pojseve x86_64 dhe AArch64 dhe lejojnë të aplikohen operacione në të njëjtën kohë mbi disa vlera (SIMD). Ndryshe nga mundësitë e ofruara në kompilatorin JIT HotSpot për avtokompozimin e operacioneve skalarë, API i ri lejon menaxhimin e qartë të kompozimit për procesimin paralel të të dhënave.
  • Në kodin JDK dhe VM HotSpot, i shkruar në C++, lejohet përdorimi i mundësive që shfaqen në specifikimin C++14. Më parë lejohej përdorimi i standardeve C++98/03.
  • Në mbledhësin e mbeturinave ZGC (Z Garbage Collector), i cili punon në mod aktiv dhe përpiqet të minimizojë sa më shumë që të jetë e mundur vonesat nga grumbullimi i mbeturinave, është shtuar mundësia e përpunimit paralel të stekëve të threads pa ndërprerjen e ekzekutimit të threads të aplikacionit. Në ZGC tani kanë mbetur vetëm ato që kërkojnë ndalimin e punës, të cilat kanë vonesa të qëndrueshme, zakonisht që nuk kalojnë disa qindra mikrosekonda.
  • Në klasat SocketChannel, ServerSocketChannel dhe java.nio.channels është shtuar mbështetje për soketët Unix (AF_UNIX).
  • Është realizuar një port për distribucionin Linux Alpine me bibliotekën standarde të C-së musl, e cila është e njohur në mjediset për konteinerë, mikroshërbime, 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 modulët e papërdorur dhe të formohet një mjedis minimal, i mjaftueshëm për ekzekutimin e aplikacionit, që lejon krijimin e imazheve të kompaktuara specifike për aplikacione të caktuara.
  • Mekanizmi Elastic Metaspace është realizuar, optimizimi i operacioneve të ndarjes dhe kthimit të memories, që zënë metadatën e klasave (metaspace) në JVM HotSpot. Përdorimi i Elastic Metaspace ul fragmentimin e memories, zvogëlon kostot e ngarkuesit të klasave, si dhe ndikon pozitivisht në performancën e aplikacioneve serverike që funksionojnë për një kohë të gjatë përmes kthimit më të shpejtë të memories që zë metadatën e klasave të papërdorura. Për të zgjedhur mënyrën e lirimit të memories pas shkarkimit të klasave, është propozuar opsioni "-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)".
  • Shtohet një port JDK për sistemet Windows, që funksionon në pajisje me procesorë të bazuar në arkitekturën AArch64.
  • Është propozuar një version i tretë parazgjedhor i API Foreign-Memory Access, i cili i lejon aplikacionet Java të kenë akses në mënyrë të sigurt dhe efektive në zonat e memories jashtë heap-it të Java, duke manipuluar me abstraksionet e reja MemorySegment, MemoryAddress dhe MemoryLayout.
  • Është realizuar një API eksperimentale Foreign Linker, e cila ofron qasje nga Java në kodin natyror. Së bashku me API-në Foreign-Memory, ky ndërfaqe programimi e bën ndjeshëm më të lehtë krijimin e mbështetjeve mbi bibliotekat e zakonshme të ndara.
  • Është shtuar utiliteti jpackage, që lejon krijimin e paketave për aplikacione Java që janë të pavarura (self-contained). Ky utilitet bazohet në javapackager nga JavaFX dhe lejon formimin e paketave në formate natyrore 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.
  • Inkapacelimi i ashpër i të gjithë elementeve të brendshëm të JDK u stabilizua si standart, përveç API-ve kritike, siç është sun.misc.Unsafe. Vlera e opsionit "—illegal-access" tani është caktuar si "deny" në vend të "permit", gjë që do të rezultojë në bllokimin e përpjekjeve për të aksesuar shumicën e klasave, metodave dhe fushave të brendshme nga kodi. Për të anashkaluar këtë kufizim, duhet të përdoret opsioni "—illegal-access=permit".
  • Stabilizimi i zbatimit të përputhjes me modelin në operatorin "instanceof" është arritur, i cili lejon të përcaktohet menjëherë një variabël lokale për qasjen në 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ë bëhet pa përcaktimin "Group group = (Group) obj": if (obj instanceof Group group) { var entries = group.getEntries(); }
  • Stabilizimi i fjalës kyçe "record" është arritur, duke ofruar një formë kompakte për përcaktimin e klasave, duke lejuar të shmangen përcaktimet e qarta të metodave të ndryshme të nivelit të ulët, siç janë equals(), hashCode() dhe toString(), në raste kur të dhënat ruhten vetëm në fusha, të cilat nuk ndryshojnë. Kur klasa përdor implementimet tipike të metodave equals(), hashCode() dhe toString(), është e mundur të shmangen përcaktimet e 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).

  • Është propozuar një variant i dytë paraprak i klasave dhe interface-ve të mbyllura („sealed“) që nuk mund të përdoren nga klasat dhe interface-t e tjera për trashëgim, zgjerim ose ri-implementim. Klasat e mbyllura gjithashtu ofrojnë një mënyrë më deklarative për të kufizuar përdorimin e superklasës sesa modifikatorët e aksesit, të 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 {…}

Burimi: opennet.ru

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster