Java SE 22 platformos ir OpenJDK 22 atviros nuorodos diegimo išleidimas

Po šešių mėnesių kūrimo, „Oracle“ išleido „Java SE 22“ („Java Platform, Standard Edition 22“) platformą, kuri naudoja OpenJDK atvirojo kodo projektą kaip atskaitos įgyvendinimą. Išskyrus kai kurių pasenusių funkcijų pašalinimą, „Java SE 22“ palaiko atgalinį suderinamumą su ankstesniais „Java“ platformos leidimais – dauguma anksčiau parašytų „Java“ projektų vis tiek veiks be pakeitimų, kai bus vykdomi naudojant naują versiją. Diegiamos Java SE 22 versijos (JDK, JRE ir Server JRE) yra paruoštos Linux (x86_64, AArch64), Windows (x86_64) ir macOS (x86_64, AArch64). Sukurtas OpenJDK projekto, Java 22 nuorodos diegimas yra visiškai atviras pagal GPLv2 licenciją su GNU ClassPath išimtimis, kad būtų galima dinamiškai susieti su komerciniais produktais.

„Java SE 22“ yra klasifikuojama kaip įprastas palaikymo leidimas ir gaus atnaujinimus iki kito leidimo. Ilgalaikio palaikymo (LTS) filialas turėtų būti Java SE 21 arba Java SE 17, kurie gaus atnaujinimus atitinkamai iki 2031 ir 2029 m. (paprastai pasiekiami iki 2028 ir 2026 m.). Viešas „Java SE 11“ LTS filialo palaikymas baigėsi praėjusį rugsėjį, tačiau pratęstas palaikymas tęsis iki 2032 m. Išplėstas „Java SE 8“ LTS filialo palaikymas tęsis iki 2030 m.

Priminsime, kad nuo „Java 10“ išleidimo projektas perėjo prie naujo kūrimo proceso, o tai reiškia trumpesnį naujų leidimų formavimo ciklą. Naujos funkcijos dabar sukurtos vienoje nuolat atnaujinamoje pagrindinėje šakoje, kuri apima paruoštus pakeitimus ir iš kurios šakos kas šešis mėnesius atšakojamos siekiant stabilizuoti naujus leidimus.

Naujos „Java 22“ funkcijos apima:

  • G1 šiukšlių rinktuvas apima regiono prisegimo palaikymą, kuris leidžia laikinai nustatyti Java objektų vietą atmintyje, kad šiukšlių rinktuvas neperkeltų jų ir kad nuorodos į šiuos objektus būtų saugiai perduodamos tarp Java ir vietinio kodo. Prisegimas leidžia sumažinti delsą ir išvengti šiukšlių surinkimo išjungimo, kai vykdomi kritiniai JNI (Java Native Interface) regionai su vietiniu kodu (vykdant šias dalis, JVM neturėtų perkelti su jais susijusių kritinių objektų, kad būtų išvengta lenktynių sąlygų). Prisegimas pašalina svarbius objektus nuo šiukšlių surinkėjo, kuris gali toliau valyti neprisegtas vietas.
  • Pridėta preliminari funkcija, leidžianti konstruktoriuose nurodyti išraiškas prieš iškviečiant super(...), naudojama aiškiai iškviesti pirminės klasės konstruktorių iš paveldėto klasės konstruktoriaus, jei šios išraiškos nenurodo konstruktoriaus sukurto egzemplioriaus. class Outer { void hello() { System.out.println("Sveiki"); } class Vidinis { Vidinis() { labas(); super (); } } }
  • FFM (Foreign Function & Memory) API buvo stabilizuota, leidžianti Java programoms sąveikauti su išoriniu kodu ir duomenimis iškviečiant funkcijas iš išorinių bibliotekų ir pasiekiant atmintį ne JVM, nenaudojant JNI (Java Native Interface).
  • Įjungtas bevardžių kintamųjų ir šablonų atitikimo palaikymas – vietoj nenaudojamų, bet būtinų kintamųjų ir šablonų skambinant dabar galite nurodyti simbolį „_“. // buvo String puslapioPavadinimas = switch (puslapis) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> "ISSUE #" + issueNumber; ... }; // dabar galite String pageName = switch (puslapis) { case GitHubIssuePage(_, _, _, int issueNumber) -> "ISSUE #" + issueNumber; };
  • Siūlomas išankstinis Class-File API diegimas Java klasės failams analizuoti, generuoti ir konvertuoti. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(baitai); 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);
  • „Java“ programa suteikia galimybę paleisti „Java“ programas, pateikiamas kelių kodų failų arba iš anksto sukompiliuotų klasių bibliotekų pavidalu, atskirai nekompiliuojant šių failų ir nekonfigūruojant kūrimo sistemos. Nauja funkcija leidžia lengviau paleisti programas, kuriose skirtingų klasių kodas yra atskirtas į atskirus failus. Prog.java: class Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Sveiki!"); } }

    Pavyzdžiui, norint paleisti programą, susidedančią iš dviejų failų „Prog.java“ ir „Helper.java“, dabar pakanka paleisti „java Prog.java“, kuri sukompiliuos „Prog“ klasę, nurodys nuorodą į „Help“ klasę, Raskite ir sukompiliuokite failą Helper ir iškvieskite pagrindinį metodą.

  • Pridėtas antrasis preliminarus eilučių šablonų diegimas, įdiegtas be eilučių literalų ir teksto blokų. Eilučių šablonai leidžia derinti tekstą su apskaičiuotomis išraiškomis ir kintamaisiais nenaudojant + operacijos. Posakių pakeitimas atliekamas naudojant pakaitalus \{..}, o pakeičiamų reikšmių teisingumui patikrinti galima prijungti specialias tvarkykles. Pavyzdžiui, SQL variklis tikrina reikšmes, kurios pakeičiamos į SQL kodą, ir kaip išvestį pateikia objektą java.sql.Statement, o JSON procesorius stebi JSON pakeitimų teisingumą ir grąžina JsonNode. String query = "SELECT * FROM Asmens p WHERE p." + nuosavybė + " = '" + reikšmė + "'"; // buvo pareiškimo užklausa = SQL."""SELECT * FROM Asmens p WHERE p.\{property} = '\{value}'"""; // tapo
  • Pridėta septintoji Vector API peržiūra, teikianti vektorinių skaičiavimų funkcijas, kurios atliekamos naudojant vektorines instrukcijas x86_64 ir AArch64 procesoriuose ir leidžia vienu metu taikyti operacijas kelioms reikšmėms (SIMD). Skirtingai nuo HotSpot JIT kompiliatoriaus galimybių, skirtų automatiniam skaliarinių operacijų vektorizavimui, nauja API leidžia aiškiai valdyti vektorizavimą lygiagrečiam duomenų apdorojimui.
  • Pridėtas preliminarus išplėstinio srauto API diegimas, kuris palaiko savo tarpinių operacijų apibrėžimą, o tai gali būti naudinga tais atvejais, kai esamų integruotų tarpinių operacijų nepakanka norimai duomenų transformacijai. Savosios tvarkyklės prijungiamos naudojant naują tarpinę operaciją Stream::gather(Gatherer), kuri apdoroja srauto elementus taikydama jiems vartotojo nurodytą tvarkyklę. 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]]
  • Bandymui buvo pasiūlyta antroji eksperimentinės API, skirtos struktūriniam lygiagrečiai, versija, kuri supaprastina kelių gijų taikomųjų programų kūrimą, apdorojant kelias užduotis, vykdomas skirtingose ​​gijose kaip vieną bloką.
  • Pridėtas antrasis preliminarus netiesiogiai deklaruotų klasių ir neįvardytų „pagrindinio“ metodo egzempliorių diegimas, kuris gali atsisakyti viešųjų / statinių deklaracijų, argumentų masyvo perdavimo ir kitų su klasės deklaracija susijusių objektų. // buvo viešoji klasė HelloWorld { public static void main(String[] args) { System.out.println("Sveikas pasaulis!"); } } // dabar galite void main() { System.out.println("Sveikas, pasauli!"); }
  • Pridėtas antras peržiūros taikymo srities verčių diegimas, leidžiantis nekintamais duomenimis dalytis gijomis ir veiksmingai keistis duomenimis tarp antrinių gijų (vertės yra paveldimos). Apimtos reikšmės yra kuriamos siekiant pakeisti gijų vietinių kintamųjų mechanizmą ir yra efektyvesnės naudojant labai daug virtualių gijų (tūkstančiai ar milijonai gijų). Pagrindinis skirtumas tarp apimamų verčių ir gijos vietinių kintamųjų yra tas, kad pirmieji įrašomi vieną kartą, jų negalima keisti ateityje ir lieka pasiekiami tik gijos vykdymo metu.
  • Lygiagretusis šiukšlių rinktuvas pagerino našumą dirbant su dideliais objektų masyvais. Kai kuriuose bandymuose su dideliais objektų masyvais optimizavimas leido sumažinti delsą prieš pradedant ieškoti objekto 20%.

Be to, galite atkreipti dėmesį į platformos naujinimą, skirtą kurti programas su grafine sąsaja JavaFX 22.

Šaltinis: opennet.ru

Добавить комментарий