Izlazak Java SE 18

Po šestih mesecih razvoja je podjetje Oracle izdalo platformo Java SE 18 (Java Platform, Standard Edition 18), pri čemer je za referenčno implementacijo uporabljen odprti projekt OpenJDK. Razen odstranitve nekaterih zastarelih funkcionalnosti je v Java SE 18 ohranjena nazaj kompatibilnost s prejšnjimi različicami platforme Java — večina prej napisanih Java projektov bo brez sprememb delovala na novi različici. Pripravljene različice za namestitev Java SE 18 (JDK, JRE in Server JRE) so na voljo za Linux (x86_64, AArch64), Windows (x86_64) in macOS (x86_64, AArch64). Referenčna implementacija Java 18, razvita v okviru projekta OpenJDK, je v celoti odprta pod licenco GPLv2 s posameznimi izjemami GNU ClassPath, ki omogočajo dinamično povezovanje s komercialnimi izdelki.

Java SE 18 je uvrščena v kategorijo izdaj z običajno podporo, nadgradnje zanje bodo izhajale do naslednje izdaje. Kot veja z dolgo podporo (LTS) je treba uporabiti Java SE 17, nadgradnje zanje bodo izhajale do leta 2029. Spomnimo, da je projekt od izdaje Java 10 prešel na nov proces razvoja, ki predvideva krajši cikel oblikovanja novih izdaj. Nova funkcionalnost se zdaj razvija v eni nenehno posodobljeni master veji, v katero se vključujejo že pripravljene spremembe in od katere se enkrat na šest mesecev odbijejo veje za stabilizacijo novih izdaj.

Med novostmi Java 18 lahko omenimo:

  • Privzeto je aktivirana kodna pika UTF-8. Java API, ki obdelujejo besedilne podatke ob upoštevanju kodiranja znakov, bodo zdaj privzeto uporabljali UTF-8 na vseh platformah, ne glede na sistemske nastavitve in izbrano lokalizacijo. Za vrnitev starega vedenja, kjer se kodiranje izbira ob upoštevanju sistemske lokalizacije, lahko uporabite parameter „-Dfile.encoding=COMPAT“.
  • Vključuje paket com.sun.net.httpserver, ki vsebuje orodje jwebserver in knjižnično API za izvajanje preprostega http strežnika za dostavljanje statične vsebine (CGI in podobni obdelovalniki servletov niso podprti). Vgrajeni http strežnik ni optimiziran za delovne obremenitve ter ne podpira upravljanja dostopov in avtentikacije, saj je predvsem namenjen uporabi v procesu razvoja za ustvarjanje prototipov, odpravljanje napak in testiranje projektov.
  • V JavaDoc je bila uvedena podpora za oznako «@snippet» za vstavitev delovnih primerov in delov kode v dokumentacijo API, ki jih je mogoče preverjati, sintaktično poudarjati in integrirati z IDE.
  • Preoblikovana je bila implementacija API java.lang.reflect (Core Reflection), namenjena pridobivanju informacij o metodah, poljih in konstruktorjih razredov ter dostopu do notranje strukture razredov. Sam API java.lang.reflect je ostal nespremenjen, vendar je zdaj implementiran z uporabo deskriptorjev metod (method handles), ki jih zagotavlja modul java.lang.invoke, namesto uporabe generatorjev bajtkode. Sprememba je omogočila unifikacijo implementacij java.lang.reflect in java.lang.invoke ter poenostavila njihovo vzdrževanje.
  • Predlagana je bila tretja predimplementacija API Vector, ki zagotavlja funkcije za vektorske izračune, ki se izvajajo z uporabo vektorskih ukazov procesorjev x86_64 in AArch64 ter omogočajo, da se operacije istočasno izvajajo na več vrednostih (SIMD). V nasprotju z zmožnostmi JIT-kompilatorja HotSpot za samodejno vektorizacijo skalarnih operacij, nov API omogoča izrecno upravljanje vektorizacije za paralelno obdelavo podatkov.
  • Dodana je bila SPI vmesnik (service-provider interface) za razreševanje imen gostiteljev in IP naslovov, ki omogoča uporabo alternativnih razreševalcev v java.net.InetAddress, ki niso vezani na obdelovalnike, ki jih ponuja operacijski sistem.
  • Predlagana je druga predhodna različica API-ja za tuje funkcije in pomnilnik, ki omogoča aplikacijam interakcijo s kodo in podatki zunaj Java runtime. Nov API učinkovito omogoča klicanje funkcij, ki se izvajajo izven JVM, ter dostop do pomnilnika, ki ga ne upravlja JVM. Na primer, lahko kličemo funkcije iz zunanjih skupnih knjižnic in dostopamo do podatkov procesa brez uporabe JNI.
  • Dodana je druga eksperimentalna različica ujemanja po vzorcu v izrazih »switch«, ki omogoča uporabo fleksibilnih vzorcev v oznakah »case«, namesto natančnih vrednosti, kar pokriva vrsto vrednosti, za katere bi prej potrebovali obsežne verige izrazov »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(); };
  • Mehanizem finalizacije je razglašen za zastarelega in bo izključen v eni od naslednjih različic, prav tako povezane metode, kot so Object.finalize(), Enum.finalize(), Runtime.runFinalization() in System.runFinalization().
  • V zbiralnikih odpadkov ZGC (Z Garbage Collector), SerialGC in ParallelGC je implementirana podpora za deduplikacijo nizov.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster