Pas njĂ« periudhĂ« prej gjashtĂ« muajsh zhvillimi, kompania Oracle publikoi platformĂ«n Java SE 18 (Java Platform, Standard Edition 18), e cila pĂ«rdor projektin e hapur OpenJDK si realizimin referues. PĂ«rveç eliminimit tĂ« disa karakteristikave tĂ« vjetruara, Java SE 18 ruan kompatibilitetin prapa me versionet e kaluara tĂ« platformĂ«s Java â shumica e projekteve Java tĂ« shkruara mĂ« parĂ« do tĂ« funksionojnĂ« pa ndryshime kur ekzekutohen nĂ« versionin e ri. NdĂ«rsa ndĂ«rtimet e gatshme pĂ«r instalim tĂ« Java SE 18 (JDK, JRE dhe Server JRE) janĂ« pĂ«rgatitur pĂ«r Linux (x86_64, AArch64), Windows (x86_64) dhe macOS (x86_64, AArch64). Realizimi referues i Java 18, i zhvilluar nĂ« kuadĂ«r tĂ« projektit OpenJDK, Ă«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 18 është klasifikuar si një lëshim me një periudhë të zakonshme mbështetjeje, përditësimet e të cilave do të lëshohen deri në lëshimin e ardhshëm. Si një degë me periudhë të gjatë mbështetjeje (LTS), duhet të përdoret Java SE 17, përditësimet për të cilën do të lëshohen deri në vitin 2029. Kujtojmë se që nga lëshimi i Java 10, projekti kaloi në një proces të ri zhvillimi, i cili parashikon një cikël më të shkurtër të formimit të lëshimeve të reja. Funksionaliteti i ri tani zhvillohet në një degë master të përhershme, në të cilën përfshihen ndryshime të gatshme dhe nga e cila ndahen degë për stabilizimin e lëshimeve të reja çdo gjashtë muaj.
Nga risitë e Java 18 mund të përmendën:
- TĂ« dhĂ«nat tekstuale tani pĂ«rdorin kodimin UTF-8 si parazgjedhje. Java API-tĂ« qĂ« pĂ«rpunojnĂ« tĂ« dhĂ«na tekstuale nĂ« pĂ«rputhje me kodimin e karaktereve, tani do tĂ« pĂ«rdorin UTF-8 si parazgjedhje nĂ« tĂ« gjitha platformat, pavarĂ«sisht nga konfigurimet e sistemit dhe zona e vendosjes. PĂ«r tĂ« rikthyer sjelljen e vjetĂ«r, nĂ« tĂ« cilĂ«n kodimi zgjidhej duke u mbĂ«shtetur nĂ« zonĂ«n e vendosjes tĂ« sistemit, mund tĂ« pĂ«rdorni parametrin â-Dfile.encoding=COMPAT.â
- Pako përmban paketën com.sun.net.httpserver, e cila përfshin utilitarin jwebserver dhe një API bibliotekash me realizimin e një serveri http të thjeshtë për dorëzimin e përmbajtjes statike (përpunuesit CGI dhe servlet-like nuk mbështeten). Serveri http i integruar nuk është optimizuar për ngarkesa pune dhe nuk mbështet menaxhimin e qasjes dhe autentifikimin, pasi është kryesisht i orientuar për përdorim gjatë procesit të zhvillimit për të krijuar prototipa, për debugging dhe testimin e projekteve.
- Në JavaDoc është implementuar mbështetje për etiketën "@snippet" për të inkorporuar shembuj funksionalë dhe fragmente kodi në dokumentacionin e API, të cilëve mund t'u aplikohen mjete për verifikimin e saktësisë, pastrimin e sintaksës dhe integrimin me IDE.
- ĂshtĂ« ripĂ«rpunuar realizimi i API java.lang.reflect (Core Reflection), i cili Ă«shtĂ« i destinuar pĂ«r tĂ« marrĂ« informacione rreth metodave, fushave dhe konstruktorĂ«ve tĂ« klasave, si dhe aksesin nĂ« strukturĂ«n e brendshme tĂ« klasave. API java.lang.reflect vetĂ« ka mbetur i paprekur, por tani Ă«shtĂ« implementuar pĂ«rmes pĂ«rdorimit tĂ« deskriptorĂ«ve tĂ« metodave (method handles), tĂ« ofruara nga moduli java.lang.invoke, nĂ« vend tĂ« aplikimit tĂ« gjeneratorĂ«ve tĂ« kodit tĂ« bytes. Ky ndryshim ka lejuar unifikimin e implementimeve java.lang.reflect dhe java.lang.invoke, dhe ka thjeshtuar mbajtjen e tyre.
- ĂshtĂ« propozuar njĂ« e tretĂ« paraprake pĂ«r realizimin e API Vector, qĂ« ofron funksione pĂ«r llogaritjet vektoriale, tĂ« cilat ekzekutohen duke pĂ«rdorur instrukcione vektoriale tĂ« procesorĂ«ve x86_64 dhe AArch64 dhe lejojnĂ« aplikimin e operacioneve menjĂ«herĂ« nĂ« disa vlera (SIMD). Ndryshe nga mundĂ«sitĂ« e ofruara nĂ« JIT-kompiluesin HotSpot pĂ«r avtokompozimin 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Ă« ndĂ«rfaqe SPI (ndĂ«rfaqe e ofruesve tĂ« shĂ«rbimeve) pĂ«r zgjidhjen e emrave tĂ« hosteve dhe IP-adresat, e cila lejon angazhimin e rezolutorĂ«ve alternativĂ« nĂ« java.net.InetAddress, tĂ« cilĂ«t nuk janĂ« lidhur me pĂ«rpunuesit e ofruar nga sistemi operativ.
- Të ofruar një realizim të dytë të përparuar të API-së Foreign Function & Memory, me anë të cilit aplikacionet mund të ndërveprojnë me kodin dhe të dhënat që ndodhen përtej Java runtime. API i ri lejon thirrjen efikase të funksioneve që ekzekutohen jo në JVM dhe qasjen në memorje, që nuk menaxhohet nga JVM. Për shembull, është e mundur të thirren funksione nga biblioteka të jashtme të ndarë dhe të aksesohen të dhënat e procesit pa përdorur JNI.
- E shtuar njĂ« realizim tĂ« dytĂ« eksperimental tĂ« pĂ«rshtatjes me shabllone nĂ« shprehjet «switch», e cila lejon pĂ«rdorimin e shablloneve fleksibĂ«l nĂ« etiketat «case» qĂ« mbulojnĂ« njĂ« seri vlerash, pĂ«r tĂ« cilat mĂ« parĂ« duheshin pĂ«rdorur njĂ« varg tĂ« gjatĂ« shprehjesh «ifâŠelse». 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(); };
- Kjo e mekanizëm i finalizimit është shpallur i vjetruar dhe do të çaktivizohet në një nga lëshimet e ardhshme, si dhe metodat e lidhura me të, si Object.finalize(), Enum.finalize(), Runtime.runFinalization() dhe System.runFinalization().
- Në mbledhësit e plehrave ZGC (Z Garbage Collector), SerialGC dhe ParallelGC është realizuar mbështetje për deduplication e vargjeve.
Burimi: opennet.ru
