Pas gjashtĂ« muaj zhvillimi, kompania Oracle publikoi platformĂ«n Java SE 17 (Java Platform, Standard Edition 17), duke pĂ«rdorur projektin e hapur OpenJDK si realizimin referencĂ«. NĂ« pĂ«rjashtim tĂ« heqjes sĂ« disa funksionaliteteve tĂ« vjetra, Java SE 17 ruan pajtueshmĂ«rinĂ« e prapme me versionet e kaluara tĂ« platformĂ«s Java â shumica e projekteve Java tĂ« shkruara mĂ« parĂ« do tĂ« funksionojnĂ« pa ndryshime nĂ«n versionin e ri. Ndryshimet e gatshme pĂ«r instalim tĂ« Java SE 17 (JDK, JRE dhe Server JRE) janĂ« pĂ«rgatitur pĂ«r Linux (x86_64, AArch64), Windows (x86_64) dhe macOS (x86_64, AArch64). Realizimi referencĂ« i Java 17, 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Ă« lidhjen dinamike me produkte komerciale.
Java SE 17 është klasifikuar si një version me mbështetje afatgjatë (LTS), për të cilin do të lëshohen përditësime deri në vitin 2029. Lëshimi i përditësimeve për versionin e fundit të ndërmjetëm Java 16 është ndalur. Rama e kaluar LTS Java 11 do të mbështetet deri në vitin 2026. Lëshimi i ardhshëm LTS është parashikuar për shtator 2024. Kujtojmë se duke filluar nga lëshimi i Java 10, projekti kaloi në një proces të ri zhvillimi, që nënkupton një cikël më të shkurtër për formimin e 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 përfunduara dhe nga e cila çdo gjashtë muaj krijohen dega për stabilizimin e lëshimeve të reja.
Nga risitë e Java 17, mund të përmenden:
- U ofrua njĂ« implementim eksperimental pĂ«r pĂ«rputhjen me modele nĂ« shprehjet «switch», qĂ« lejon pĂ«rdorimin e modeleve fleksibĂ«l nĂ« etiketat «case» qĂ« pĂ«rfshijnĂ« njĂ« seri vlerash, pĂ«r tĂ« cilat mĂ« parĂ« duhej tĂ« pĂ«rdoren zinxhirĂ« tĂ« gjata shprehjesh «ifâŠelse». PĂ«r mĂ« tepĂ«r, brenda «switch» Ă«shtĂ« siguruar mundĂ«sia pĂ«r tĂ« trajtuar vlerat NULL. Object o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
- ĂshtĂ« stabilizuar mbĂ«shtetja pĂ«r klasat dhe interfazet e vulosur («sealed»), tĂ« cilat nuk mund tĂ« pĂ«rdoren nga klasat dhe interfazet e tjera pĂ«r trashĂ«gimi, zgjerim ose tejkalim tĂ« implementimit. Klasat e vulosura ofrojnĂ« gjithashtu njĂ« mĂ«nyrĂ« mĂ« deklarative pĂ«r tĂ« kufizuar pĂ«rdorimin e superklasĂ«s, sesa modifikatorĂ«t e qasjes, tĂ« cilat bazohet 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 {âŠ}
- ĂshtĂ« propozuar njĂ« realizim i dytĂ« i parakohshĂ«m i API Vector, duke ofruar funksione pĂ«r llogaritjet vektoriale, tĂ« cilat kryhen duke pĂ«rdorur udhĂ«zimet vektoriale tĂ« procesorĂ«ve x86_64 dhe AArch64 dhe lejojnĂ« gjithashtu qĂ« operacionet tĂ« zbatohen menjĂ«herĂ« pĂ«r disa vlera (SIMD). Ndryshe nga mundĂ«sitĂ« e ofruara nga kompajleri JIT HotSpot pĂ«r avtokompaktimin e operacioneve skalar, API i ri ofron mundĂ«sinĂ« pĂ«r tĂ« menaxhuar qartĂ« vektorizimin pĂ«r pĂ«rpunimin paralel tĂ« tĂ« dhĂ«nave.
- ĂshtĂ« shtuar njĂ« realizim i parakohshĂ«m i API Foreign Function & Memory, me ndihmĂ«n e tĂ« cilit aplikacionet mund tĂ« ndĂ«rveprojnĂ« me kodin dhe tĂ« dhĂ«nat qĂ« ndodhen jashtĂ« runtime Java. API i ri mundĂ«son thirrjen efektive tĂ« funksioneve qĂ« nuk ekzekutohen nĂ« JVM dhe qasjen nĂ« memorje qĂ« nuk menaxhohet nga JVM. PĂ«r shembull, mund tĂ« thirren funksione nga biblioteka tĂ« ndara tĂ« jashtme dhe tĂ« merret qasja nĂ« tĂ« dhĂ«nat e procesit pa pĂ«rdorimin e JNI.
- Motori i vizatimit për macOS, i cili siguron funksionimin e API Java 2D, i cili, nga ana e tij, angazhohet në API Swing, është adapotuar për përdorimin e API grafike Metal. Me default, në platformën macOS vazhdon të përdoret OpenGL, ndërsa për të aktivizuar mbështetje për Metal kërkohet vendosja e parametrave «-Dsun.java2d.metal=true» dhe të ketë të paktën versionin macOS 10.14.x.
- ĂshtĂ« shtuar njĂ« port pĂ«r platformĂ«n macOS/AArch64 (kompjuterĂ«t e Apple me çipet e reja Apple M1). Karakteristika e portit Ă«shtĂ« mbĂ«shtetje pĂ«r mekanizmin e mbrojtjes sĂ« memorjes W^X (Write XOR Execute), ku faqet e memories nuk mund tĂ« jenĂ« tĂ« aksesueshme njĂ«kohĂ«sisht pĂ«r shkruaj dhe ekzekutim. (Kodi mund tĂ« ekzekutohet vetĂ«m pasi tĂ« ndalohet shkrimi, dhe shkrimi nĂ« njĂ« faqe memorje Ă«shtĂ« i mundur vetĂ«m pas ndalimit tĂ« ekzekutimit).
- Kthehu përdorimin vetëm të semantikës strikte (strictfp) për shprehjet me fluturim të lëngshëm. Ndalohet mbështetje e disponueshme duke filluar nga lëshimi i Java 1.2 për semantikën «default», e cila përfshinte thjeshtime për të punuar në sisteme me procesorë matematikorë shumë të vjetër x87 (pas shfaqjes së instrukcioneve SSE2, nevoja për semantikë të përmirësuar u zhduk).
- JanĂ« realizuar tipe tĂ« reja ndĂ«rfaqesh pĂ«r gjeneratorĂ«t e numrave tĂ« rastĂ«sishĂ«m, si dhe janĂ« realizuar algoritme shtesĂ« pĂ«r njĂ« gjenerim mĂ« cilĂ«sor tĂ« numrave rastĂ«sishĂ«m. Aplikacionet e kanĂ« mundĂ«sinĂ« tĂ« zgjedhin algoritmin e gjenerimit tĂ« numrave tĂ« rastĂ«sishĂ«m. ĂshtĂ« pĂ«rmirĂ«suar mbĂ«shtetje pĂ«r gjenerimin e flukseve tĂ« objekteve tĂ« rastĂ«sishĂ«m.
- ĂshtĂ« zbatuar inkapsulimi i detyrueshĂ«m i fortĂ« i tĂ« gjithĂ« elementeve tĂ« brendshĂ«m tĂ« JDK, pĂ«rveç API-ve kritikĂ«, siç Ă«shtĂ« sun.misc.Unsafe. Inkapsulimi i fortĂ« bllokon pĂ«rpjekjet pĂ«r qasje nga kodi nĂ« klasa, metoda dhe fusha tĂ« brendshme. MĂ« parĂ«, mund tĂ« mbyllej moda e inkapsulimit tĂ« fortĂ« me opsionin «âillegal-access=permit», por tani Ă«shtĂ« shpallur e vjetĂ«ruar. PĂ«r aplikacionet qĂ« kĂ«rkojnĂ« akses nĂ« klasat, metodat dhe fushat e brendshme, duhet tĂ« pĂ«rcaktohen qartĂ« ato me opsionin «âadd-opens» ose atributin Add-Opens nĂ« skedarin me manifest.
- Aplikacionet kanë mundësinë të përcaktojnë filtrat për deserializimin e të dhënave, të cilat mund të varen nga konteksti dhe të zgjidhen dinamikisht në lidhje me operacione të caktuara të deserializimit. Filtrat e caktuar janë të aplikueshëm për të gjithë makinën virtuale (JVM-wide), dmth. mbulojnë jo vetëm aplikacionin vetë, por edhe libraritë e jashtme të përdorura në aplikacion.
- Në Swing është shtuar metoda javax.swing.filechooser.FileSystemView.getSystemIcon për ngarkimin e ikonave me madhësi të madhe, duke lejuar përmirësimin e formimit të ndërfaqes në ekrane me dendësi të lartë pikselesh (HighDPI).
- Në API java.net.DatagramSocket është implementuar mbështetje për lidhjen me grupe Multicast pa qenë e nevojshme përdorimi i një API të veçantë java.net.MulticastSocket.
- ĂshtĂ« pĂ«rmirĂ«suar utilitari IGV (Ideal Graph Visualizer), i cili ofron vizualizimin interaktiv tĂ« pĂ«rfaqĂ«simit tĂ« pĂ«rkohshĂ«m tĂ« kodit nĂ« kompilatorin JIT HotSpot VM C2.
- Në JavaDoc, me analogji me kompilatorin javac, kur raportohet një gabim tani jepet numri i rreshtit problematik në skedarin burimor dhe vendi i gabimit.
- Shtesa e pronës native.encoding, që reflekton emrin e kodimit sistematik të karaktereve (UTF-8, koi8-r, cp1251, etj.).
- Shtesa e interfesës java.time.InstantSource, e cila lejon manipulimin e kohës pa u lidhur me zonën kohore.
- Shtesa e API java.util.HexFormat për konvertimin në përfaqësimin në gjashtëdhjetë dhe anasjelltas.
- Në kompilator është shtuar modaliteti blackhole, që çaktivizon operacionet e përjashtimit të kodit të pa përdorur (eliminimi i kodit të vdekur), i cili mund të përdoret gjatë testimeve të performancës.
- Në Runtime është shtuar opsioni "-Xlog:async" për regjistrimin e logëve në modalitet asinkron.
- Për krijimin e lidhjeve të sigurta, tani përdoret si e dhënë TLS 1.3 (më parë përdorej TLS 1.2).
- ĂshtĂ« kaluar nĂ« kategorinĂ« e planifikuar pĂ«r fshirje API Applet (java.applet.Applet*, javax.swing.JApplet), i shpallur mĂ« parĂ« si tĂ« vjetĂ«r, qĂ« pĂ«rdorej pĂ«r tĂ« nisur aplikacionet Java nĂ« shfletues (nuk ka mĂ« kuptim pas ndĂ«rprerjes sĂ« mbĂ«shtetjes pĂ«r plug-in-in e Java pĂ«r shfletuesit).
- ĂshtĂ« kaluar nĂ« kategorinĂ« e planifikuar pĂ«r fshirje Security Manager, i cili ka humbur shumĂ« vlerĂ« dhe Ă«shtĂ« bĂ«rĂ« i panevojshĂ«m pas ndĂ«rprerjes sĂ« mbĂ«shtetjes pĂ«r plug-in-in e shfletuesit.
- ĂshtĂ« hequr mekanizmi RMI Activation, i cili Ă«shtĂ« bĂ«rĂ« i vjetruar, Ă«shtĂ« kaluar nĂ« opsion qĂ« nĂ« Java 8 dhe pothuajse nuk pĂ«rdoret nĂ« praktikĂ«n moderne.
- Nga SDK është hequr kompilatori eksperimental, i cili mbështet JIT (just-in-time) për kompilim dinamik të kodit Java për HotSpot JVM, si dhe modaliteti i kompilim të parashikuar (AOT, ahead-of-time) të klasave në kodin makinerik para nisjes së makinës virtuale. Kompilatori është shkruar në Java dhe bazohet në punimet e projektit Graal. Theksohet se mbështetja e kompilatorit kërkon një sasi të madhe përpjekjesh, të cilat nuk justifikohen në kushtet e mungesës së përdorueshmërisë nga zhvilluesit.
Burimi: opennet.ru
