PĂ€rast kuue kuu arengut vĂ€ljastas ettevĂ”te Oracle Java SE 18 (Java Platform, Standard Edition 18), mille etalonrakendusena kasutatakse avatud projekti OpenJDK. VĂ€lja arvatud mĂ”nede vananenud funktsioonide eemaldamine, on Java SE 18 sĂ€ilitanud ĂŒhilduvuse varasemate Java versioonidega â enamik varasemalt kirjutatud Java projekte toimib muutumatult uue versiooni all. Paigaldamiseks valmis Java SE 18 (JDK, JRE ja Server JRE) komplektid on ette valmistatud Linuxile (x86_64, AArch64), Windowsile (x86_64) ja macOS-ile (x86_64, AArch64). OpenJDK projekti raames vĂ€lja töötatud Java 18 etalonrakendus on tĂ€ielikult avatud GPLv2 litsentsi alusel koos GNU ClassPath eranditega, mis lubavad dĂŒnaamilist sidumist kommertstootedega.
Java SE 18 kuulub tavalise tugiperioodiga vĂ€ljavalde kategorisse, mille vĂ€rskendusi antakse vĂ€lja kuni jĂ€rgmise versiooni ilmumiseni. Pikaajalise toetuse (LTS) haru saamiseks tuleks kasutada Java SE 17, mille vĂ€rskendusi antakse vĂ€lja kuni 2029. aastani. Tuletame meelde, et alates Java 10 vĂ€ljalaskest on projekt liikunud uue arendusprotsessi poole, mis hĂ”lmab lĂŒhemaid uute versioonide vĂ€ljalasketsĂŒkleid. Uus funktsionaalsus areneb nĂŒĂŒd pidevalt uuendatavas master-harus, kuhu lisatakse juba valmis muudatused ja millest hargnevad iga kuue kuu tagant harud uute versioonide stabiliseerimiseks.
Java 18 uuendustest vÔib vÀlja tuua:
- Vaikimisi on kasutusel UTF-8 kodeering. Java API, mis kĂ€sitlevad tekstilisi andmeid kodeerimisest lĂ€htuvalt, kasutavad nĂŒĂŒd vaikimisi UTF-8 kĂ”igil platvormidel, sĂ”ltumata sĂŒsteemi seadistustest ja mÀÀratud lokaliseerimisest. Vanema kĂ€itumise taastamiseks, kus kodeering valitakse sĂŒsteemi lokaliseerimise jĂ€rgi, saab kasutada parameetrit â-Dfile.encoding=COMPATâ.
- Komplekti kuulub paketis com.sun.net.httpserver utiliit jwebserver ja raamatukogude API, mis sisaldab lihtsat http-serverit staatilise sisu edastamiseks (CGI ja servlet-sarnaseid töötlejaid ei toetata). Sisseehitatud http-server ei ole optimeeritud töökoormuseks ning ei toeta juurdepÀÀsuhaldust ja autentimist, kuna see on peamiselt suunatud arendusprotsessis prototĂŒĂŒpide loomiseks, tĂ”rkeotsimiseks ja projektide testimiseks.
- JavaDocis on rakendatud toega tag â@snippetâ tööde nĂ€idiste ja koodilĂ”ikude integreerimiseks API dokumentatsiooni, millele saab rakendada kontrollimisvahendeid, sĂŒntaksi esiletĂ”stmist ja IDE-dega integreerimist.
- API java.lang.reflect (Core Reflection) rakenduse on ĂŒmber tehtud, et saada teavet klasside meetodite, vĂ€ljade ja konstruktorite kohta ning ligipÀÀsuks klasside sisemistele struktuuridele. API java.lang.reflect jÀÀb samaks, kuid nĂŒĂŒd on see realiseeritud meetodite deskriptorite (method handles) kasutamise kaudu, mida pakub java.lang.invoke moodul, selle asemel et kasutada bytecode generaatorit. See muudatus vĂ”imaldas standardiseerida java.lang.reflect ja java.lang.invoke rakenduste ning lihtsustada nende hooldust.
- Pakkus vÀlja kolmanda esialgse rakenduse API Vector jaoks, mis pakub funktsioone vektorkalkulatsioonide jaoks, mis teostatakse x86_64 ja AArch64 protsessorite vektoriinstruktsioonide abil ning vÔimaldavad samaaegselt rakendada toiminguid mitmele vÀÀrtusele (SIMD). Erinevalt JIT-kompilaatori HotSpot pakutud skalaarsest operatsioonide automaatvektoriseerimisest annab uus API vÔimaluse selgelt hallata vektorkalkulatsioonide kasutamist andmete paralleelseks töötlemiseks.
- Lisatud SPI-liides (service-provider interface) hostide nimede resolvimiseks ja IP-aadresse, vĂ”imaldades kasutada java.net.InetAddress alternatiivseid resolvereid, mis ei ole seotud operatsioonisĂŒsteemi poolt pakutud töötlejatega.
- Pakutud on teine eelneva versiooni rakendus API Foreign Function & Memory, mille abil saavad rakendused suhelda koodiga ja andmetega, mis asuvad Java kÀivitusaja vÀljas. Uus API vÔimaldab efektiivselt kutsuda vÀlja funktsioone, mis ei tööta JVM-is, ja juurdepÀÀsu JVM-i mittehaldatavale mÀlule. NÀiteks saab vÀliseid jagatud teeke ja protsessi andmeid kutsuda vÀlja ilma JNI kasutamata.
- Lisatud on teine katseversioon mustri vastavuse vĂ€ljenditele 'switch', mis vĂ”imaldab 'case' sildil kasutada mitte tĂ€pseid vÀÀrtusi, vaid paindlikke mustreid, mis katab kohe terve seeria vÀÀrtusi, mille jaoks varem oli vaja kasutada tĂŒlikaid 'if...else' lauseid. 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(); };
- KĂ€ivitusmechanism, mis on mÀÀratud vananemise ja eemaldamisele ĂŒhes jĂ€rgmistest vĂ€ljaannetest koos sellega seotud meetoditega, nĂ€iteks Object.finalize(), Enum.finalize(), Runtime.runFinalization() ja System.runFinalization(), kuulutati vĂ€lja vananenuks.
- ZGC (Z Garbage Collector), SerialGC ja ParallelGC prĂŒgikoristajates on rakendatud stringide dedupeerimise tugi.
Allikas: opennet.ru
