Java SE 24 ja OpenJDK 24 vÀljaanne

PĂ€rast kuue kuu arendust on Oracle vĂ€lja andnud Java SE 24 (Java Platform, Standard Edition 24) platvormi, mille tĂ”enduseks on avatud projekt OpenJDK. VĂ€lja arvatud mĂ”nede aegunud funktsioonide eemaldamine, sĂ€ilitab Java SE 24 tagasitĂ€idetavuse varasemate Java vĂ€ljaannetega — enamik varem kirjutatud Java-projekte töötab uue versiooni all ilma muudatusteta. Java SE 24 (JDK, JRE ja Server JRE) installimiseks valmis koostised on ette nĂ€htud Linuxile (x86_64, AArch64), Windowsile (x86_64) ja macOS-ile (x86_64, AArch64). OpenJDK projekti raames vĂ€lja töötatud Java SE 24 tĂ”end on tĂ€ielikult avatud GPLv2 litsentsi alusel koos GNU ClassPath eranditega, mis lubavad dĂŒnaamilist sidumist kommertstoodetega.

Java SE 24 kuulub tavalise toe kestusega vĂ€ljaannete kategooriasse, mille vĂ€rskendused avaldatakse jĂ€rgmise vĂ€ljaandeni. Pikaajalise toe haruna tuleks kasutada Java SE 21 vĂ”i Java SE 17, mille vĂ€rskendused avaldatakse vastavalt 2031. ja 2029. aastani (avalik - kuni 2028. ja 2026. aastani). Java SE 8 LTS-haru pikendatud tugi kestab kuni 2030. aastani, samas kui Java SE 11 — kuni 2032. aastani. JĂ€rgmine LTS vĂ€ljaanne on sĂŒgisene Java SE 25.

Java SE 24-ss pakutud uuenduste hulgas:

  • Pakutud on eksperimentaalne Shenandoah prĂŒgikoguja generatiivne tööreĆŸiim, mille kĂ€igus töödeldakse vanu ja hiljuti loodud objekte eraldi efektiivsuse suurendamiseks lĂŒhikese eluajaga objektide puhastamisel. Uus reĆŸiim tagab etteennustatavama lĂ€bilaskevĂ”ime, koormuse muutustele vastupidavuse ja mĂ€lutarbimise vĂ€henemise prĂŒgikogumise ajal. Shenandoah plaanija keskendub prĂŒgikogumise ajal peatamisaja vĂ€hendamisele, tehes suurema osa tööst paralleelselt Java rakenduste tĂ€itmisega.
  • HotSpot JVM-is on rakendatud eksperimentaalne tugi kompaktsetele objektide pealkirjatele, mille suurust on 64-bitistes sĂŒsteemides vĂ€hendatud 96 bitilt 64 bitini (12 baitilt 8 baitini). Pealkirjade suuruse vĂ€henemine vĂ”imaldab vĂ€hendada mĂ€lu suurust ja suurendada vahemĂ€lu efektiivsust.
  • G1 prĂŒgikollektsioonis on lihtsustatud rakenduse mĂ€lu juurdepÀÀsu jĂ€lgivate tĂ”kete rakendamine. Uues versioonis on tĂ”kete laiendamise toimingud edasi lĂŒkatud C2 JITi kompileerimise hilisemasse etappi. Tehtud testid nĂ€itavad, et selline edasiviimine vĂ€hendab C2 JIT kompilaatori ĂŒlepea kulusid 10–20% sĂ”ltuvalt rakendusest.
  • Lisatud on API krĂŒptograafiliste vĂ”tme tuletamise funktsioonide (KDF, key derivation function) kasutamiseks, mis vĂ”imaldavad luua tĂ€iendavaid vajaliku pikkusega vĂ”tmeid, mis pĂ”hinevad salajasel vĂ”tmel (nĂ€iteks paroolil) ja suvalisel andmekogul. KDF API on hetkel eelvaate (preview) staatuses.
  • Lisatud on vĂ”imalus klasside ette laadimiseks (Ahead-of-Time loading) ja sidumiseks. See muudatus kiirendab HotSpot JVM kĂ€ivitamist, pakkudes rakenduses kasutatavaid klasse juba laaditud ja seotud olekus. Rakenduse esimese kĂ€ivitamise ajal salvestatakse kĂ”igi klasside olek vahemĂ€llu ja edasiste kĂ€ivitamiste ajal kasutatakse seda laadimise kiirendamiseks.
  • Lisatud on Class-File API, mis vĂ”imaldab Java klassifailide analĂŒĂŒsi, genereerimist ja teisendamist.

    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 Stream API, mis toetab enda vaheoperatsioonide mÀÀratlemist, mis vĂ”ivad olla kasulikud juhtudel, kui olemasolevad sisseehitatud vaheoperatsioonid ei piisa soovitud andmete teisendamiseks. Enda töötlejad ĂŒhendatakse uue vaheoperatsiooniga Stream::gather(Gatherer), mis töötleb voolu elemente, rakendades neile kasutaja 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]]
  • Neljas eelnĂ”ud on vĂ€lja pakutud piiratud vÀÀrtuste (Scoped Values) kohta, mis vĂ”imaldavad jagada muutumatuid andmeid voogudes ja tĂ”husalt andmeid vahetada alamsĂ”idukite vahel (vÀÀrtused pĂ€rinevad). Scoped Values areneb kohalike voogude muutujate (thread-local variables) mehhanismi asendamiseks ja on tĂ”husamad, kui kasutatakse vĂ€ga suurt arvu virtuaalseid vooge (tuhanded ja miljonid vood). Peamine erinevus Scoped Values ja kohalike voogude muutujate vahel on see, et esimesi kirjutatakse ĂŒhe korra, neid ei saa enam muuta ja nad jÀÀvad kĂ€ttesaadavaks ainult voolu tĂ€itmise ajal.
  • Muster pĂ”hjalikuks vastavusse viimise mehhanismis on lisatud esialgne tugi primitiivsete tĂŒĂŒpide (int, byte, char ja muud baastĂŒĂŒbid, mis ei ole objektid) kasutamiseks kĂ”igis mallivormides, '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 
 }
  • Esitatud on ĂŒheksas eelnĂ”ud API Vector, mis pakub vektoriarvutuste funktsioone, mis tehakse x86_64 ja AArch64 protsessorite vektoriinstruktsioonide abil ja vĂ”imaldavad operatsioone rakendada korraga mitmele vÀÀrtusele (SIMD). Erinevalt HotSpot JIT kompilaatori pakutavatest automaatvektoriseerimise vĂ”imalustest skalaarses operatsioonis annab uus API vĂ”imaluse selgelt hallata vektoreid andmete paralleelseks töötlemiseks.
  • On rakendatud virtuaalsete voogude sĂŒnkroniseerimise toetust ilma nende kinnitamiseta (pinning) platvormiga seotud voogudele. SĂŒnkroniseeritud meetodis vĂ”i vĂ€ljendis blokeeritud olekus vabastavad virtuaalsed vood nĂŒĂŒd oma platvormi voogu, lubades teistel virtuaalsetel voogudel seda kasutada, mis suurendab mĂ€rkimisvÀÀrselt saadaval olevate virtuaalsete voogude arvu ja parandab mitme voogu kasutavate rakenduste skaleeritavust.
  • Lisatud on kolmas eelvariant, mis vĂ”imaldab vĂ€ljendite konstruktorites esitada enne super(
) kutsumist, mida kasutatakse vanema klassi konstruktorist kutsumise selgeks tegemiseks pĂ€randatud klassi konstruktorist, kui need vĂ€ljendid ei viita konstruktoriga loodud eksemplarile. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • Utiliidil jlink on rakendatud tugi run-time piltide loomiseks ilma JMOD failideta, mis vĂ”imaldab vĂ€hendada JDK suurust umbes 25%.
  • Lisatud on teine eelvariant vĂ€ljendi "import module M" kasutamiseks, et importida kohe kĂ”ik paketid, mida antud moodul ekspordib. Muudatus lihtsustab oluliselt moodulite raamatukogude taaskasutamist, vĂ”imaldades raamatukogusid ja klasse ĂŒhendada ilma nende asukoha mÀÀramiseta pakettide hierarhias. NĂ€iteks vĂ€ljendi "import module java.base" korral imporditakse kĂ”ik 54 paketti, mis kuuluvad java.base moodulisse, mis varem tuli eraldi mainida ("import java.io.*", "import java.util.*" jne).
  • Lisatud on neljas eelvariant vaikimisi kuulutatud klasside ja anonĂŒĂŒmsete meetodi "main" eksemplaride rakendamiseks, kus saab vĂ€ltida public/static kuulutusi, argumendi massiivi edastamist ja muid klassi deklaratsiooniga seotud elemente. // oli public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // nĂŒĂŒd vĂ”ib void main() { System.out.println("Hello, World!"); }
  • Testimiseks on ette pandud neljas eelvariant API jaoks struktureeritud paralleelsuse (Structured Concurrency) jaoks, mis lihtsustab mitmeharuliste rakenduste arendamist, kĂ€sitledes mitmeid ĂŒlesandeid, mis tĂ€idetakse erinevates harudes, kui ĂŒhtset ploki.
  • API-s KeyPairGenerator, Signature ja KeyFactory on lisatud tugi algoritmide ML-KEM (CRYSTALS-Kyber) ja ML-DSA (CRYSTALS-Dilithium) jaoks, mida on standardeerinud Ameerika Ühendriikide rahvuslik standardite ja tehnoloogia instituut (NIST) ja kvantkompuutrite otsingute eest vastupidavad. Need algoritmid kasutavad krĂŒptograafia meetodeid, mis pĂ”hinevad vĂ”rgustiku teooria ĂŒlesannete lahendamisel, lahendamise aeg, mis ei erine tavapĂ€rastel ja kvantkompuutritel.
  • ZGC prĂŒgikogu ei toeta enam mittegeneratiivset tööreĆŸiimi, mis ei eralda «vana» ja «noore» objekti töötlemist. Alates Java SE 23 on generatiivne reĆŸiim ZGC vaikimisi rakendatav.
  • Lisatud on hoiatused JNI (Java Native Interface) ja FFM (Foreign Function & Memory) API kasutamise kohta, et valmistada arendajaid ette nende API-de juurdepÀÀsu piiramiseks tulevastes versioonides, kus vaikimisi keelatakse interaktsioon loodusliku koodiga.
  • KĂ€ivitamisel on hoiatus, kui kasutatakse vĂ€lise mĂ€lu (JVM-ist vĂ€ljas) juurdepÀÀsu meetodeid, mida pakub klass sun.misc.Unsafe. VĂ€lise mĂ€lu ja kohalike koodidega suhtlemiseks soovitatakse kasutada VarHandle API-d. Eelmisest versioonist alates on sun.misc.Unsafe tugi kuulutatud vananenuks.
  • Security Manager on keelatud, olles juba ammu kaotanud oma olulisuse pĂ€rast brauserivÀÀrpildi toe lĂ”ppemist. Security Manager kuulutati Java 17-is vananenuks. Ühes jĂ€rgnevas vĂ€ljaandes on plaanis Security Manageri kood tĂ€ielikult eemaldada.
  • Kood 32-bitise Windowsi platvormi toetamiseks x86 sĂŒsteemides on eemaldatud. 32-bitine Java port x86 sĂŒsteemidele on kuulutatud vananenuks ja plaanitud eemaldamiseks (Linux 32-bitistele x86 sĂŒsteemidele toetus lĂ”petatakse).

Lisaks on vĂ€lja antud JavaFX 24 rakenduste vĂ€ljatöötamise platvormi vĂ€rskendus ning uus GraalVM universaalne virtuaalmasin, mis toetab rakenduste kĂ€ivitamist JavaScriptis (Node.js), Pythonis, Rubys, R-is, kĂ”ikides JVM-i (Java, Scala, Clojure, Kotlin) keeltes ja keeltes, mille jaoks saab genereerida LLVM-bittkoodi (C, C++, Rust). Uues GraalVM versioonis on lisaks JDK 24 toele, optimeeritud masina Ă”ppega seotud ĂŒlesannete pĂ€rast, parandatud Java bytecode'i kompileerimise toetust masinkoodiks, lisatud SkipFlow mehhanism, et vĂ€hendada tĂ€itmisfailide suurust ja kompileerimise aega.

Allikas: opennet.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster