Java SE 22 platvormi ja OpenJDK 22 avatud viiterakenduse väljalase

Pärast kuuekuulist arendustööd on Oracle välja andnud Java SE 22 (Java Platform, Standard Edition 22) platvormi, mis kasutab OpenJDK avatud lähtekoodiga projekti referentsrakendusena. Välja arvatud mõnede aegunud funktsioonide eemaldamine, säilitab Java SE 22 tagasiühilduvuse Java platvormi eelmiste väljalasetega – enamik varem kirjutatud Java-projekte töötab uue versiooniga käivitamisel endiselt ilma muudatusteta. Java SE 22 (JDK, JRE ja Server JRE) installitavad järgud on ette valmistatud Linuxi (x86_64, AArch64), Windowsi (x86_64) ja macOS-i (x86_64, AArch64) jaoks. OpenJDK projekti poolt välja töötatud Java 22 viiterakendus on täielikult avatud lähtekoodiga GPLv2 litsentsi alusel koos GNU ClassPathi eranditega, et võimaldada dünaamilist linkimist kommertstoodetega.

Java SE 22 on klassifitseeritud tavaliseks tugiväljalaseks ja seda jätkatakse värskenduste saamisega kuni järgmise väljalaskeni. Pikaajalise toe (LTS) haru peaks olema Java SE 21 või Java SE 17, mis saavad värskendusi vastavalt 2031. ja 2029. aastani (tavaliselt saadaval kuni 2028. ja 2026. aastani). Avalik tugi Java SE 11 LTS-i harule lõppes mullu septembris, kuid pikendatud tugi jätkub kuni 2032. aastani. Java SE 8 LTS-i haru pikendatud tugi jätkub kuni 2030. aastani.

Tuletame meelde, et alates Java 10 väljalaskmisest läks projekt üle uuele arendusprotsessile, mis tähendab lühemat tsüklit uute väljaannete moodustamiseks. Uus funktsionaalsus on nüüd välja töötatud ühes pidevalt uuenevas põhiharus, mis sisaldab valmis muudatusi ja millest hargnetakse iga kuue kuu tagant uute väljaannete stabiliseerimiseks.

Java 22 uute funktsioonide hulka kuuluvad:

  • G1 prügikoguja sisaldab piirkonna kinnitamise tuge, mis võimaldab ajutiselt fikseerida Java-objektide asukoha mälus, et vältida nende teisaldamist prügikoguja poolt ja võimaldada viiteid nendele objektidele ohutult Java ja algkoodi vahel edastada. Kinnitamine võimaldab teil vähendada latentsust ja vältida prügikogumise keelamist JNI (Java Native Interface) kriitiliste piirkondade käivitamisel omakoodiga (nende jaotiste täitmise ajal ei tohiks JVM võistlustingimuste vältimiseks liigutada nendega seotud kriitilisi objekte). Kinnitamine eemaldab kriitilised objektid prügikoguja vaateväljast, mis võib jätkata kinnitamata alade puhastamist.
  • Lisatud on esialgne funktsioon, mis lubab konstruktorites määrata avaldisi enne super(...) kutsumist, mida kasutatakse päritud klassikonstruktori algklassi konstruktori selgesõnaliseks kutsumiseks, kui need avaldised ei viita konstruktori loodud eksemplarile. class Välimine { void tere() { System.out.println("Tere"); } class Sisemine { Sisemine() { tere(); Super(); } } }
  • FFM (Foreign Function & Memory) API on stabiliseeritud, võimaldades Java programmide interaktsiooni välise koodi ja andmetega, kutsudes funktsioone välistest teegidest ja pääsedes juurde mälule väljaspool JVM-i, ilma JNI-d (Java Native Interface) kasutamata.
  • Lubatud on nimetute muutujate ja mustrite sobitamise tugi – helistamisel kasutamata, kuid vajalike muutujate ja mustrite asemel saate nüüd määrata märgi “_”. // was String pageName = switch (page) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> “ISSUE #” + issueNumber; ... }; // nüüd saate String leheNimi = switch (page) { case GitHubIssuePage(_, _, _, int issueNumber) -> “ISSUE #” + issueNumber; };
  • Java-klassi failide sõelumiseks, genereerimiseks ja teisendamiseks pakutakse välja klassifaili API esialgne juurutamine. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); bait[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue().). startsWith("debug"))) { classBuilder.with(ce } } });
  • Java-utiliit võimaldab käivitada Java-programme, mis on saadaval mitme koodifaili või eelkompileeritud klassiteegi kujul, ilma neid faile eraldi kompileerimata ja ilma ehitussüsteemi konfigureerimata. Uus funktsioon muudab lihtsamaks programmide käivitamise, milles eri klasside kood on eraldatud eraldi failideks. Prog.java: class Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Abimees { static void run() { System.out.println("Tere!"); } }

    Näiteks kahest failist "Prog.java" ja "Helper.java" koosneva programmi käivitamiseks piisab nüüd "java Prog.java" käivitamisest, mis kompileerib klassi Prog, määratleb viite klassile Helper, leidke ja kompileerige fail java ja helistage põhimeetodile.

  • Lisatud on stringimallide teine ​​eelrakendus, mis on rakendatud lisaks stringiliteraalidele ja tekstiplokkidele. Stringimallid võimaldavad kombineerida teksti arvutatud avaldiste ja muutujatega ilma + operaatorit kasutamata. Avaldiste asendamine toimub asenduste \{..} abil ning asendatud väärtuste õigsuse kontrollimiseks saab ühendada spetsiaalsed töötlejad. Näiteks kontrollib SQL-mootor SQL-koodi asendatavaid väärtusi ja tagastab väljundina objekti java.sql.Statement, samas kui JSON-protsessor jälgib JSON-i asenduste õigsust ja tagastab JsonNode'i. String query = "SELECT * FROM Isik p WHERE p." + atribuut + " = '" + väärtus + "'"; // oli lausepäring = SQL."""SELECT * FROM Isik p WHERE p.\{omadus} = '\{väärtus}'"""; // sai
  • Lisatud on Vector API seitsmes eelvaade, mis pakub funktsioone vektorarvutuste jaoks, mida teostatakse vektorijuhiste abil x86_64 ja AArch64 protsessoritel ning võimaldab toiminguid üheaegselt rakendada mitmele väärtusele (SIMD). Erinevalt HotSpot JIT kompilaatoris pakutavatest võimalustest skalaaroperatsioonide automaatseks vektoriseerimiseks võimaldab uus API paralleelse andmetöötluse vektoriseerimist selgesõnaliselt juhtida.
  • Lisatud on laiendatud Stream API esialgne juurutus, mis toetab teie enda vaheoperatsioonide määratlemist, mis võib olla kasulik juhtudel, kui olemasolevatest sisseehitatud vahetoimingutest ei piisa soovitud andmete teisendamiseks. Omakäitlejad ühendatakse uue vaheoperatsiooni Stream::gather(Gatherer) abil, mis töötleb vooelemente, rakendades neile kasutaja määratud töötleja. 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]]
  • Testimiseks on pakutud struktureeritud samaaegsuse eksperimentaalse API teist versiooni, mis lihtsustab mitme lõimega rakenduste arendamist, töödeldes mitut erinevates lõimedes täidetavaid toiminguid ühe plokina.
  • Lisati kaudselt deklareeritud klasside ja "peamise" meetodi nimetute eksemplaride teine ​​eelrakendus, mis võib loobuda avalikest/staatilistest deklaratsioonidest, argumentide massiivi edastamisest ja muudest klassideklaratsiooniga seotud olemitest. // oli public class HelloWorld { public static void main(String[] args) { System.out.println("Tere maailm!"); } } // nüüd saate void main() { System.out.println("Tere, maailm!"); }
  • Lisati ulatusega väärtuste teine ​​eelvaaterakendus, mis võimaldab muutumatuid andmeid jagada lõimede vahel ja andmeid tõhusalt alamlõimede vahel vahetada (väärtused on päritud). Piiratud väärtused töötatakse välja, et asendada lõime kohalike muutujate mehhanismi ja need on tõhusamad, kui kasutatakse väga palju virtuaalseid lõime (tuhandeid või miljoneid lõime). Peamine erinevus ulatuse väärtuste ja lõime kohalike muutujate vahel on see, et esimesed kirjutatakse üks kord, neid ei saa tulevikus muuta ja need jäävad kättesaadavaks ainult lõime täitmise ajaks.
  • Paralleelprügikoguja on parandanud jõudlust suurte objektide massiividega töötamisel. Optimeerimine võimaldas mõnes suurte objektide massiividega testides vähendada viivitust enne objekti otsimise alustamist 20%.

Lisaks võite märkida graafilise liidesega JavaFX 22 rakenduste loomise platvormi värskenduse avaldamist.

Allikas: opennet.ru

Lisa kommentaar