PĂ€rast kuut kuud arendust on Oracle vĂ€lja lasknud Java SE 25 platvorma (Java Platform, Standard Edition 24), mille etalonrakenduseks on avatud projekt OpenJDK. VĂ€lja arvatud mĂ”nede vananenud funktsioonide eemaldamine, on Java SE 25-s sĂ€ilinud tagurpidi ĂŒhilduvus eelneva Java platvormiga â enamiku varasemate Java projektide toimimine ei muutu, kui need kĂ€ivitatakse uue versiooni all. Valmis installeeritavad Java SE 25 (JDK, JRE ja Server JRE) kogumid on ette valmistatud Linuxi (x86_64, AArch64), Windowsi (x86_64) ja macOS-i (x86_64, AArch64) jaoks. OpenJDK projekti raames arendatud Java SE 25 etalonrakendus on tĂ€ielikult avatud GPLv2 litsentsiga koos GNU ClassPath eranditega, mis lubavad dĂŒnaamilist linkimist kaubanduslike toodetega.
Java SE 25 on mÀÀratud pikaajalise toetusega vĂ€ljaandeks, mille uuendusi hakatakse vĂ€lja laskma kuni 2033. aastani (avalikud uuendused jĂ”uavad turule kuni septembrini 2030). Pikaajalise toetuse (LTS) harud Java SE 17 ja 21 jĂ€tkavad samuti toetust, mille uuendusi hakatakse vĂ€lja laskma vastavalt 2029. ja 2031. aastani (avalikud â kuni 2026. ja 2028. aastani). Java SE 8 ja 11 LTS harude laiendatud toetus kestab kuni 2030. ja 2032. aastani.
Java SE 25-s on esitatud jÀrgmised uuendused (1, 2, 3, 4):
- Lisatud eksperimentaalne API StableValue, et töötada objektidega, mis sisaldavad muutumatuid andmeid ja mida töödeldakse JVM-is konstantsidena. Sellistele objektidele kehtivad jĂ”udluse optimeerimised, mis on sarnased «final» vĂ”tmesĂ”naga kodeeritud vĂ€ljadega. API StableValue eraldab pĂŒsivÀÀrtuste loomise ja nende initsialiseerimise, kindlustades, et vÀÀrtus saab initsialiseerida vaid ĂŒks kord, vĂ€hendades programmide kĂ€ivitamise aega ja vĂ”imaldades kasutajakoodis rakendada konstantide ĂŒhendamisoptimeerimisi (constant-folding), mida on varem kasutatud ainult JDK sees. class Application { // Oli: // static final UserService USERS = new UserService(); // Sai: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- Lisatud eksperimentaalne API krĂŒptograafiliste vĂ”tmete, sertifikaatide ja tĂŒhistatud sertifikaatide loendite kodeerimiseks ja dekodeerimiseks, kasutades PEM (Pivacy-Enhanced Mail) formaati.
- Lisatud on piiratud vÀÀrtuste (Scoped Values) tugi, mis vĂ”imaldab jagada muutumatuid andmeid keeristes ning tĂ”husalt vahetada andmeid alakeeriste vahel (vÀÀrtused pĂ€randatakse). Scoped Values arendatakse vĂ€lja, et asendada teemaga seotud muutujad (thread-local variables) ja on tĂ”husamad, kui kasutatakse vĂ€ga suurt arvu virtuaalseid keeriseid (tuhandeid ja miljoneid keeriseid). Peamine erinevus Scoped Values ja teemaga seotud muutujate vahel on see, et esimesed salvestatakse ĂŒks kord, neid ei saa hiljem muuta ja need on saadaval ainult keerise kĂ€itamise ajal.
- Lisatud on API krĂŒptograafiliste vĂ”tme tuletamise funktsioonide (KDF, key derivation function) kasutamiseks, mis vĂ”imaldavad tuletada tĂ€iendavaid vajaliku pikkusega vĂ”tmeid pĂ”hivĂ”tme (nĂ€iteks parooli) ja meelevaldse andmekogumi alusel.
- Kood ja ehitusskeemid 32-bitiste x86 sĂŒsteemide toe eemaldamiseks on kĂ”rvaldatud. 32-bitiste x86 sĂŒsteemide toe lĂ”petamine on vĂ”imaldanud lihtsustada JDK ehitamise ja testimise infrastruktuuri ning vĂ”imaldanud rakendada platvormide spetsiifilisi vĂ”imalusi ilma 32-bitiste x86 sĂŒsteemide jaoks varukoopia töötlemise loomata.
- Lisatud on vĂ”imalus kasutada ĂŒhte vĂ€ljendit «import module M», et importida kohe kĂ”ik paketid, mida antud moodul ekspordib. See muudatus lihtsustab oluliselt moodulite raamatukogude uuesti kasutamist, vĂ”imaldades raamatukogusid ja klasse kaasata ilma nende positsiooni mÀÀratlemata pakettide hierarhias. NĂ€iteks «import module java.base» toob kaasa kĂ”igi 54 paketi impordi, mis kuuluvad java.base moodulisse, mida varem oleks tulnud nimetada eraldi («import java.io.*», «import java.util.*» jne).
- Pakutud on kompaktne programmide vorming, mis vĂ”ib olla kasulik Ă”petamiseks ja vĂ€ikeste rakenduste arendamisel. Kompaktse vormingu korral ei ole vajalik liigsete klasside mÀÀramine, tĂŒĂŒpilised API-d imporditakse automaatselt ning lihtsustatud sisendi/vĂ€ljundi meetodid on saadaval. NĂ€iteks saab rakenduse «Hello, World!» vĂ€hendada jĂ€rgmiseni: void main() { IO.println(«Hello, World!»); }
- Lubatud on vĂ€ljendite mÀÀramine vĂ€ljendite konstruktoreis enne super(âŠ) kutsumist, mida kasutatakse vanema klassi konstruktorist pĂ€randatud klassi konstruktorist selge kutsumise jaoks, kui need vĂ€ljendid ei viita konstruktoriga loodud eksemplarile. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
- Lisasime Shenandoah prĂŒgikogujale generatiivse tööreĆŸiimi, kus vanu ja hiljuti loodud objekte töödeldakse eraldi, et suurendada lĂŒhikese elueaga objektide puhastamise efektiivsust. Uus reĆŸiim tagab ennustatavama lĂ€bilaskevĂ”ime, vastupidavuse koormuse muutuste suhtes ja vĂ€hendab mĂ€lutarbimist prĂŒgikogumise ajal. Shenandoah ajakava eesmĂ€rk on vĂ€hendada prĂŒgikogumise peatuste aega, viies lĂ€bi suuremaid töid paralleelselt Java rakenduste tĂ€itmisega.
- Lihtsustatud on vahepealse (Ahead-of-Time) laadimise ja klasside komponeerimise vahemĂ€lu loomine, mis kiirendab HotSpot JVM-i kĂ€ivitamist, kasutades juba laaditud ja kokku pandud klasside olekut. KĂ€ivitamisel ei ole enam vaja eraldi toiminguid tegevuse salvestamiseks ja vahemĂ€lu loomiseks, piisab ĂŒhest kĂ€sust: java -XX:AOTCacheOutput=app.aot -cp app.jar com.example.App âŠ
- HotSpot Java VM-i kĂ€ivitamisel on ŃДалОзаŃОО lihtne kasutada meetodite kĂ€itamise profiile, mis on saadud rakenduse eelmise kĂ€ivitamise kĂ€igus. Muudatus vĂ”imaldab JIT-kompilaatoril statistika kogumisest loobuda ja alustada kohe native-koodi genereerimist ilma profiili koostamise ootamiseta.
- HotSpot JVM-is on ŃДалОзŃĐ”ĐŒine kompaktsete objektide pĂ€iste toe, mille suurus 64-bitises sĂŒsteemis on vĂ€henenud 96 bitilt 64 bitini (12 baitilt 8 baitini). PĂ€iste suuruse vĂ€hendamine aitab vĂ€hendada virna suurust ja parandada vahemĂ€lu tĂ”husust.
- Pakutud on API Vectori katseversioon, mis pakub funktsioone vektoriliste arvutuste teostamiseks, mis viiakse lÀbi x86_64 ja AArch64 protsessorite vektorinstruktsioonide abil, vÔimaldades samal ajal rakendada toiminguid mitmele vÀÀrtusele (SIMD). Erinevalt HotSpot JIT-kogujas pakutavatest automaatvektorimise vÔimalustest skalaarses operatsioonis, pakub uus API vÔimalust selgelt hallata vektoriseerimist andmete paralleelseks töötlemiseks.
- Katsetamiseks on ette nĂ€htud viies eelvĂ€ljaanne API struktuurse paralleelsuse (Structured Concurrency) jaoks, mis lihtsustab mitme niidi rakenduste arendamist, töötledes mitmeid ĂŒlesandeid, mis töötavad erinevates muudes niitides, kui ĂŒhte blokki.
- Mustri vastavuse mehhanismi raames on ette nĂ€htud kolmas eelvĂ€ljaanne vĂ”imalusest kasutada primitiivseid tĂŒĂŒpe (int, byte, char ja muud pĂ”hitĂŒĂŒbid, mis ei ole objektid) kĂ”igis ĆĄabloonides, 'instanceof' operaatoris ja 'switch' plokkides. switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { ... b ... }
- JDK Flight Recorderis (JFR) on lisatud katse tugi profiiilimiseks, mis vĂ”imaldab tĂ€psemat jĂ€lgimist CPU ressursikasutuse ĂŒle Linuxi platvormil. Erinevate konstruktsioonide kĂ€itusaeg vĂ”ib visuaalselt kuvada vĂ€rviliste "FlameGraph" diagrammidega.
- JDK Flight Recorderi (JFR) stabiilsust on parendatud Java niitide virnade asĂŒnkroonse proovivĂ”tu kĂ€igus, vĂ€ltides helistamispunktide kaudu ainult "ohutute punktide" (safepoints) lĂ€bihelimist.
- JDK Flight Recorderis (JFR) on lisatud meetodite jÀlgimise ja kÀitusaegade hindamise vahendid. Toetatakse konkreetsete meetodite virna jÀlgimist ja tÀpse statistika salvestamist meetodikutsumiste kohta, hÔlmates selliseid mÔÔdikuid nagu kÀitusaeg ja kutsumiste arv.
Allikas: opennet.ru
