Java SE 24 ja OpenJDK 24 vÀljaanne

PĂ€rast kuue kuu arendust on Oracle vĂ€lja andnud Java SE 24 platvormi (Java Platform, Standard Edition 24), mille etalonrealisatsiooniks on avatud projekti OpenJDK kasutamine. VĂ€lja arvatud mĂ”ned vananenud funktsioonid, on Java SE 24 sĂ€ilitanud tagurpidi ĂŒhilduvuse varasemate Java versioonidega — enamik varasemalt kirjutatud Java projekte töötab ilma muudatusteta uue versiooni all. Installimiseks valmis Java SE 24 (JDK, JRE ja Server JRE) versioonid on saadaval Linuxi (x86_64, AArch64), Windowsi (x86_64) ja macOS-i (x86_64, AArch64) jaoks. OpenJDK projekti raames vĂ€lja töötatud Java SE 24 etalonrealisatsioon on tĂ€ielikult avatud GPLv2 litsentsi all GNU ClassPath eranditega, mis lubavad dĂŒnaamilist lingimist kommertsproduktidega.

Java SE 24 kuulub tavalise toetuse vĂ€ljaannete kategooriasse, mille uuendused tulevad vĂ€lja kuni jĂ€rgmise versioonini. Pikaajalise toetuse (LTS) haruna tuleks kasutada Java SE 21 vĂ”i Java SE 17, mille uuendused on saadaval kuni 2031. ja 2029. aastani vastavalt (avalikud - kuni 2028. ja 2026. aastani). LTS-haru Java SE 8 pikendatud toetus kestab kuni 2030. aastani ja Java SE 11 kuni 2032. aastani. JĂ€rgmine LTS-vĂ€ljaanne on Java SE 25 sĂŒgisene versioon.

Java SE 24-s pakutud uuenduste seas:

  • Uuendatud on eksperimentaalne generatiivne reĆŸiim Shenandoah prĂŒgikoristaja, kus vanu ja hiljuti loodud objekte töödeldakse eraldi, et suurendada lĂŒhikese eluiga omavate objektide puhastamise efektiivsust. Uus reĆŸiim tagab ettearvamatuma lĂ€bilaskevĂ”ime, koormuse muutuste suhtes vastupidavuse ja prĂŒgikoristamise ajal mĂ€lu tarbimise vĂ€hendamise. Shenandoah planeerija on suunatud prĂŒgikoristamise ajal peatuste aja vĂ€hendamisele, tehes suuremat tööd paralleelselt Java rakenduste tĂ€itmisega.
  • HotSpot JVM-s on eksperimenteerimise toeks kompaktsete objektide pĂ€iste toetamine, mille suurus 64-bitistes sĂŒsteemides on vĂ€hendatud 96 bite 64 bitini (12 baiti 8 baitini). PĂ€iste suuruse vĂ€henemine aitab vĂ€hendada mĂ€lu hulka ja parandada vahemĂ€lu töö efektiivsust.
  • G1 jÀÀtmekogumisvĂ”tmes on lihtsustatud barjÀÀride rakendamise protsess, mis jĂ€lgivad rakenduse juurdepÀÀsu mĂ€lule. Uues versioonis on barjÀÀride laienemise toimingud viidud hilisemasse C2 JIT kompileerimise etappi. Tehtud testid nĂ€itavad, et selline ĂŒmberpaigaldamine vĂ€hendab C2 JIT-kompilaatori kulusid 10–20% vĂ”rra, sĂ”ltuvalt rakendusest.
  • Lisatud on API krĂŒptograafiliste vĂ”tme tuletamise funktsioonide (KDF, key derivation function) kasutamiseks, mis vĂ”imaldavad luua tĂ€iendavaid vajalikud pikkusega vĂ”tmeid pĂ”hivĂ”tme (nĂ€iteks parooli) ja juhusliku andmekogumi pĂ”hjal. KDF API on hetkel esialgses (preview) staadiumis.
  • Lisatud on vĂ”imalus eelseisva (Ahead-of-Time) laadimise ja klasside koostamise jaoks. See muudatus kiirendab HotSpot JVM-i kĂ€ivitamist, pakkudes rakenduses kasutatavaid klasse juba laaditud ja koostatud kujul. Rakenduse esmakordsel kĂ€ivitamisel salvestatakse kĂ”igi klasside olek cache'i ja jĂ€rgnevatel kĂ€ivitustel kasutatakse seda laadimise kiirendamiseks.
  • Lisatud on API Class-File Java klassifailide analĂŒĂŒsimiseks, genereerimiseks ja teisendamiseks.

    ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue().startsWith("debug"))) { classBuilder.with(ce); } } });

  • Lisatud on tĂ€iustatud API Stream, mis toetab kasutajate enda vaheoperatsioonide mÀÀratlemist. See vĂ”ib olla kasulik olukordades, kus olemasolevad sisseehitatud vaheoperatsioonid ei vasta soovitud andmete töötlemise nĂ”uetele. Kasutaja mÀÀratud töötlejate ĂŒhendamiseks kasutatakse uut vaheoperatsiooni Stream::gather(Gatherer), mis kĂ€sitleb voolu elemente, rakendades neile mÀÀratud töötlejat. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==>> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Esitati neljandat eelnĂ”u ulatuslike vÀÀrtuste (Scoped Values) rakendamiseks, mis vĂ”imaldavad jagada muutumatut teavet erinevates voogudes ning tĂ”husalt andmeid vahetada alamvoogude vahel (vÀÀrtused pĂ€rinevad). Scoped Values arenevad, et asendada voogude kohalikke muutujaid (thread-local variables) ja nad on tĂ”husamad, kui kasutatakse vĂ€ga suurt arvu virtuaalseid vooge (tuhandeid ja miljoneid vooge). Oluline erinevus Scoped Values ja voogude kohalike muutuja vahel on see, et esimesed kirjutatakse sisse ainult ĂŒks kord, ei saa hiljem muutuda ja on kergesti kĂ€tkĂ€tavad vaid voogude tĂ€itmise ajal.
  • Musterkattemehhanismidesse on lisatud esialgne tugi primitiivtĂŒĂŒpide (int, byte, char ja muud pĂ”hitĂ€iendused, mis ei ole objektid) kasutamiseks kĂ”igis mallides, Ăąmbito on 'instanceof' ja 'switch' plokkides. switch (x.getStatus()) { case 0 -> 'okei'; case 1 -> 'hoiatus'; case 2 -> 'vale'; case int i -> 'tundmatu olek: ' + i; } if (i instanceof byte b) { 
 b 
 }
  • Esimene versioon API Vector, mis pakub vektorkalkulatsiooni funktsioone, mis töötavad x86_64 ja AArch64 protsessorite vektoriinstruktsioonidega, vĂ”imaldab samaaegset rakendamist operatsioonide jaoks mitmele vÀÀrtusele (SIMD). Erinevalt JIT-kompilaatori HotSpot pakutavatest skalaarkalkulatsioonide automaatvektoreerimise vĂ”imalustest, annab uus API vĂ”imaluse selgelt hallata vektoreerimist andmete paralleelseks töötlemiseks.
  • Reaaliseeritud on virtuaalsete kiirusvoogude sĂŒnkroniseerimise tugi ilma nende seondamiseta (pinning) platvormiga seotud kiirusvoogudega. SĂŒnkroniseeritud meetodi vĂ”i vĂ€ljendi sees blokeeritud virtuaalsed kiirusvoogud vabastavad nĂŒĂŒd oma platvormi kiirusvoo, vĂ”imaldades teistele virtuaalsetele kiirusvoogudele selle kasutamist, mis suurendab oluliselt saadaolevate virtuaalsete kiirusvoogude arvu ja parandab mitme kiirusvoo kasutamisega rakenduste skaleeritavust.
  • Lisatud on kolmas eelneva variandi vĂ”imalus, mis vĂ”imaldab vĂ€ljendite mÀÀramist vĂ€ljendite koostajates enne super(
) kutsumist, mida kasutatakse vanema klassi konstruktori selgeks kutsumiseks jĂ€rgneva klassi konstruktori kaudu, kui need vĂ€ljendid ei viita konstrueeritud objekti eksemplarile. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • Jlink utiliidis on rakendatud toe loomine run-time piltide jaoks ilma JMOD failide kasutamiseta, mis vĂ”imaldab kĂ€rpida JDK suurust umbes 25%.
  • Lisatud on teine eelnev variandi kasutamine ĂŒhe vĂ€ljendi "import module M" jaoks, et importida kohe kĂ”ik pakid, mille eksportimine on mÀÀratud antud moodulis. See muudatus lihtsustab oluliselt moodulite raamatukogude taaskasutamist, vĂ”imaldades raamatukogude ja klasside ĂŒhendamist ilma nende asukoha mÀÀramata pakihierarhias. NĂ€iteks "import module java.base" viib kĂ”igi 54 pakki importimiseni, mis kuuluvad java.base moodulisse, mille eraldi mainimine oleks olnud vajalik ("import java.io.*", "import java.util.*" jne).
  • Lisatud on neljas eelversioon varjatult deklareeritud klassidest ja nimetutest meetodi „main” eksemplaridest, kus on vĂ”imalik loobuda public/static deklareerimisest, argumentide massiivi edastamisest ja muudest klassi deklareerimisega seotud elementidest. \/\/ oli public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } \/\/ nĂŒĂŒd on vĂ”imalik void main() { System.out.println("Hello, World!"); }
  • Neljas eelversioon API-le struktureeritud paralleelsuse (Structured Concurrency) jaoks, mis lihtsustab multitehniliste rakenduste arendamist, pakkudes vĂ”imalust hallata mitmeid erinevates lĂ”imedes kĂ€itatavaid ĂŒlesandeid kui ĂŒhte plokki, on pakutud testimiseks.
  • API-s KeyPairGenerator, Signature ja KeyFactory on lisatud tugi ML-KEM (CRYSTALS-Kyber) ja ML-DSA (CRYSTALS-Dilithium) algoritmidele, mida on standardinud Ameerika Ühendriikide Rahvuslik Standardite ja Tehnoloogia Instituut (NIST) ning mis on kvantarvutite rĂŒnnakute suhtes resistentsed. Need algoritmid kasutavad krĂŒptograafia meetodeid, mis pĂ”hinevad lattice teooria probleemide lahendamisel, mille lahendusaeg ei erine tavalistes ja kvantarvutites.
  • ZGC prĂŒgikogujas on eemaldatud mitte-geneerilise tööreĆŸiimi tugi, mis ei erista «vana» ja «noore» objekti töötlemist. Alates Java SE 23-st rakendatakse geneerilist ZGC reĆŸiimi vaikimisi.
  • Lisatud hoiatused API JNI (Java Native Interface) ja FFM (Foreign Function & Memory) kasutamise kohta, et valmistada arendajaid ette API-dele juurdepÀÀsu piiramiseks tulevaste vĂ€ljaannete raames, kus rakendatakse andmete terviklikkuse reĆŸiimi, mis vaikimisi keelab suhtlemise natiivse koodiga.
  • Ühendatud hoiatus vĂ€lise mĂ€lu (vĂ€ljast JVM) juurdepÀÀsu meetodite kasutamiseks, mida pakub klass sun.misc.Unsafe. VĂ€lise mĂ€lu (off-heap) ja vĂ€lishaldusega suhtlemiseks on soovitatav kasutada API-d VarHandle. Eelmisel vĂ€ljaandel kuulutati class sun.misc.Unsafe vananenuks.
  • Kustutatud Security Manager, mis on pikka aega olnud vananenud ja ei ole enam vajalik pĂ€rast brauseripikenduste toe lakkamist. Security Manager viidi Java 17-s vananenud kategooriasse. Üks jĂ€rgmisi vĂ€ljaandeid plaanib tĂ€ielikult eemaldada Security Manageri koodi.
  • Toetatud 32-bitiste Windows operatsioonisĂŒsteemide kood eemaldatakse x86 sĂŒsteemides. Java port 32-bitistele x86 sĂŒsteemidele on kuulutatud vananenuks ja plaanitakse eemaldada (Linuxi tugi 32-bitistele x86 sĂŒsteemidele lĂ”petatakse).

Lisaks mĂ€rgitakse, et on vĂ€lja antud platvormi vĂ€rskendus JavaFX 24 graafiliste kasutajaliideste rakenduste loomise jaoks ja uus universaalne virtuaalmasin GraalVM, mis toetab rakenduste kĂ€itamisvĂ”imet JavaScriptis (Node.js), Pythonis, Ruby's, R'is, mis tahes JVM-i keeles (Java, Scala, Clojure, Kotlin) ja keeltes, mille jaoks saab luua LLVM bitekoodi (C, C++, Rust). Uues GraalVM versioonis on JDK 24 toe kĂ”rval viisardid optimeeritud masinĂ”ppega seotud ĂŒlesannete jaoks, parandatud on Java bytekoodi kompileerimise toetust masinkoodiks, lisatud on SkipFlow mehhanism, et vĂ€hendada tĂ€idefailide suurust ja kompileerimise aega.

Allikas: opennet.ru

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster