Java SE 23 ja OpenJDK 23 vÀljaanne

PĂ€rast kuue kuu arengut avaldas Oracle Java SE 23 (Java Platform, Standard Edition 23), milleks on avatud projekti OpenJDK pĂ”hjal loodud viide. VĂ€ljajĂ€tmine mĂ”nede vananenud funktsioonide osas Java SE 23-s sĂ€ilitab tagasiside ĂŒhilduvuse eelmiste Java platvormi vĂ€ljaannetega — enamik varem kirjutatud Java projekte töötavad muutusteta uue versiooni all. Paigaldusvalmis Java SE 22 (JDK, JRE ja Server JRE) koostised on ette valmistatud Linuxile (x86_64, AArch64), Windowsile (x86_64) ja macOS-le (x86_64, AArch64). OpenJDK projekti raames vĂ€lja töötatud Java 23 viide on tĂ€ielikult avatud GPLv2 litsentsi alusel GNU ClassPathi eranditega, mis lubavad dĂŒnaamilist sidumist kommertsproduktidega.

Java SE 23 kuulub tavalise hooldusaega tootevĂ€ljaande kategooriasse, mille uuendusi antakse vĂ€lja kuni jĂ€rgmise vĂ€ljaandeni. Pikaajalise toega (LTS) haru jaoks tuleks kasutada Java SE 21 vĂ”i Java SE 17, mille uuendusi antakse vĂ€lja kuni 2031. ja 2029. aastani vastavalt (avalikud versioonid — kuni 2028. ja 2026. aastani). Java SE 8 LTS haru pikendatud tugi kestab kuni 2030. aastani, Java SE 11 aga kuni 2032. aastani.

Java SE 23-s pakutud uuenduste hulka kuuluvad:

  • VaikesĂ€tetena on sisse lĂŒlitatud Generational Z GC (Generational Z Garbage Collector) generatiivne reĆŸiim, mis kasutab „vanade“ ja „noorte“ objektide eraldi töötlemist, mis suurendab hiljuti loodud, lĂŒhikese elueaga objektide puhastamise efektiivsust. Generational ZGC kasutamine vĂ€hendab ressursi eraldamise ajal peatuste riske ning vĂ€hendab CPU koormust ja mĂ€lutarvet prĂŒgikoristuse ajal. Generational ZGC testimine Apache Cassandra 4-iga nĂ€itas, et mĂ€lu lĂ€bilaskevĂ”ime suurenes neljakordselt pĂŒsiheap-suuruse korral ja mĂ€lu maht vĂ€henes neljandiku vĂ”rra sama lĂ€bilaskevĂ”ime juures.
  • JavaDoc-s on nĂŒĂŒd toetatud Markdowni sĂŒntaks koodi dokumenteerimiseks kommentaarides, mida saab kasutada HTML ja @-siltide segu asemel.
    Java SE 23 ja OpenJDK 23 vÀljaanne
  • Mustri sobitamise mehhanisme on laiendatud esialgse toe lisamisega primitiivsete tĂŒĂŒpide (nt int, byte, char ja muud mitteobjekti baastĂŒĂŒbid) kasutamiseks kĂ”igis mallitĂŒĂŒpides, "instanceof" operaatoris ja "switch" plokkides. switch (x.getStatus()) { case 0 -> "okei"; case 1 -> "hoiatus"; case 2 -> "viga"; case int i -> "tundmatu olek: " + i; } if (i instanceof byte b) { 
 b 
 }
  • Eraldi toega on lisatud ĂŒksik vĂ€ljend "import module M" importimiseks kohe kĂ”iki pakette, mida vastav moodul ekspordib. See muudatus lihtsustab oluliselt mooduli raamatukogude taaskasutust, lubades raamatukogusid ja klasse ĂŒhendada, mÀÀratlemata nende asukohta pakettide hierarhias. NĂ€iteks "import module java.base" toob kaasa 54 paketi importimise, mis kuuluvad java.base moodulisse, mida varem pidanud eraldi mainima (nt "import java.io.*", "import java.util.*" jms).

    Esitatakse teist eelversiooni Class-File API-st klasside Java-failide analĂŒĂŒsimiseks, genereerimiseks ja konverteerimiseks. 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); } } });

  • Esitatakse kaheksas eelversioon Vector API-st, mis pakub funktsioone vektorkalkulatsioonide jaoks, mida tehakse x86_64 ja AArch64 protsessorite vektoriinstruktsioonide kasutamisega, vĂ”imaldades korraga rakendada operatsioone mitmele vÀÀrtusele (SIMD). Erinevalt HotSpot JIT-kompilaatori automaatvektoriseerimise vĂ”imalustest skalaarses operatsioonis, annab uus API vĂ”imaluse selgelt hallata vektoriseerimist paralleelse andmetöötluse jaoks.
  • Klassile java.io.Console on lisatud meetodid format, printf, readPassword ja readLine, et vormindada, kuvada ja lugeda teksti, vĂ”ttes arvesse valitud lokaalset keelt. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", new Date()) 2024-mai-16 neljapĂ€ev
  • Lisatud on teise versiooni eelnĂ”u laiendatud API-st Stream, mis toetab kohandatud vaheoperatsioonide mÀÀratlemist, mis vĂ”ivad olla kasulikud juhtudel, kui olemasolevad sisseehitatud vaheoperatsioonid ei ole soovitud andmete transformatsiooniks piisavad. Kohandatud kĂ€sitlejad ĂŒhendatakse uue vaheoperatsiooni Stream::gather(Gatherer) abil, mis töötleb voogusid, rakendades nende suhtes kasutaja mÀÀratud kĂ€itlejat. 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]]
  • Lisatud on kolmanda versiooni eelnĂ”u ebatavaliselt deklareeritud klassidest ja anonĂŒĂŒmsetest instantsidest meetodile „main”, kus saab hakkama ilma public/static deklaratsioonide, argumentide massiivi ĂŒlekandmise ja muude klassi deklareerimisega seotud elementideta. // oli public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // nĂŒĂŒd saab void main() { System.out.println("Hello, World!"); }
  • Lisatud on teine eelversioon vĂ”imalusest, mis lubab konstruktorites kasutada vĂ€ljendeid enne super(...) kutsumist, mida kasutatakse vanema klassi konstruktori selgesĂ”naliseks kutsumiseks tuletatud klassi konstruktori seest, kui need vĂ€ljendid ei viita konstrueeritud objekti eksemplarile. class Outer { void hello() { System.out.println("Tere"); } class Inner { Inner() { hello(); super(); } } }
  • Lisatud on kolmas eelproov piirdvÀÀrtuste (Scoped Values) rakenduse, mis vĂ”imaldab jagada muutumatut teavet lĂ”imedes ja tĂ”husalt andmeid vahetada alalĂ”imede vahel (vÀÀrtused pĂ€randuvad). PiirdvÀÀrtusi arendatakse asendama lĂ”ime kohalikke muutujaid (thread-local variables) ja need on palju efektiivsemad, kui kasutatakse vĂ€ga suurt hulka virtuaalseid lĂ”ime (tuhandeid ja miljoneid lĂ”ime). Peamine erinevus piirdvÀÀrtuste ja lĂ”ime kohalike muutujate vahel on see, et esimesed salvestatakse ĂŒks kord, neid ei saa hiljem muuta ning need jÀÀvad kĂ€ttesaadavaks ainult lĂ”ime töö ajal.
  • Testimiseks on esitatud kolmas eelnĂ”u API struktuurse paralleelsuse (Structured Concurrency) jaoks, mis lihtsustab mitme lĂ”imega rakenduste arendust, kĂ€sitledes mitmeid erinevates lĂ”imedes tĂ€idetavaid ĂŒlesandeid kui ĂŒhte ploki.
  • Klassi sun.misc.Unsafe poolt pakutud ligipÀÀsumeetodid vĂ€listesse mĂ€ludesse (vĂ€ljas JVM) on kuulutatud aegunuks ja kavandatud eemaldamiseks. VĂ€lise mĂ€lu (off-heap) ja vĂ€listesse koodidesse pöördumiseks soovitatakse kasutada VarHandle API-d ning FFM (Foreign Function & Memory) API-d.

Lisaks vÔib mÀrkida JavaFX 23 graafilise kasutajaliidese rakenduste loomise platvormi vÀrskenduse vÀljaandmist ja Oracle JDK 23 JIT-kompilaatori GraalVM kaasamist pÔhikoosseisu.

Samuti on vÀlja antud uus versioon universaalsest virtuaalsest masinast GraalVM, mis toetab rakenduste kÀivitamist JavaScriptis (Node.js), Pythonis, Ruby's, R-is, mis tahes keeles JVM-i jaoks (Java, Scala, Clojure, Kotlin) ning keeltes, mille jaoks saab genereerida LLVM bitkoodi (C, C++, Rust). Uue versiooni kÀigus on lisaks JDK 23 toele optimeeritud mÀlu kasutust ja tÀitmisfaili suurust ning rakendatud tÀiemahuline toetus Pythonit ja WebAssembly't Java-koodi integreerimise tööriistadele, kasutades JIT-kompileerimist.

Allikas: opennet.ru

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