Java SE 22 platformas un OpenJDK 22 atvērtās atsauces ieviešanas izlaišana

Pēc sešu mēnešu izstrādes Oracle ir izlaidusi Java SE 22 (Java Platform, Standard Edition 22), kas izmanto OpenJDK atvērtā pirmkoda projektu kā atsauces ieviešanu. Izņemot dažu novecojušu funkciju noņemšanu, Java SE 22 saglabā atpakaļsaderību ar iepriekšējiem Java platformas laidieniem — lielākā daļa iepriekš rakstīto Java projektu joprojām darbosies bez izmaiņām, ja tie darbojas jaunajā versijā. Instalējamās Java SE 22 (JDK, JRE un Server JRE) versijas ir sagatavotas operētājsistēmai Linux (x86_64, AArch64), Windows (x86_64) un macOS (x86_64, AArch64). Izstrādāts OpenJDK projektā, Java 22 atsauces ieviešana ir pilnībā atvērta saskaņā ar GPLv2 licenci ar GNU ClassPath izņēmumiem, lai nodrošinātu dinamisku saiti ar komerciāliem produktiem.

Java SE 22 ir klasificēts kā regulārs atbalsta laidiens, un tas turpinās saņemt atjauninājumus līdz nākamajam laidienam. Ilgtermiņa atbalsta (LTS) filiālei jābūt Java SE 21 vai Java SE 17, kas saņems atjauninājumus attiecīgi līdz 2031. un 2029. gadam (parasti pieejams līdz 2028. un 2026. gadam). Publisks atbalsts Java SE 11 LTS filiālei beidzās pagājušā gada septembrī, bet pagarinātais atbalsts turpināsies līdz 2032. gadam. Pagarināts atbalsts Java SE 8 LTS filiālei turpināsies līdz 2030. gadam.

Atgādinām, ka, sākot ar Java 10 izlaišanu, projekts pārgāja uz jaunu izstrādes procesu, kas nozīmē īsāku ciklu jaunu laidienu veidošanai. Jauna funkcionalitāte tagad ir izstrādāta vienā pastāvīgi atjauninātajā galvenajā filiālē, kas ietver gatavas izmaiņas un no kuras filiāles tiek atzarotas ik pēc sešiem mēnešiem, lai stabilizētu jaunus izdevumus.

Jaunās Java 22 funkcijas ietver:

  • G1 atkritumu savācējs ietver atbalstu reģiona piespraušanai, kas ļauj īslaicīgi fiksēt Java objektu atrašanās vietu atmiņā, lai atkritumu savācējs tos nepārvietotu, un ļautu atsauces uz šiem objektiem droši pārsūtīt starp Java un vietējo kodu. Piespraušana ļauj samazināt latentumu un izvairīties no atkritumu savākšanas atspējošanas, izpildot JNI (Java Native Interface) kritiskos reģionus ar vietējo kodu (izpildot šīs sadaļas, JVM nevajadzētu pārvietot ar tiem saistītos kritiskos objektus, lai izvairītos no sacensību apstākļiem). Piespraužot, tiek noņemti kritiskie objekti no atkritumu savācēja redzesloka, kas var turpināt tīrīt nepiespraustās vietas.
  • Ir pievienota sākotnējā funkcija, kas ļauj konstruktoros norādīt izteiksmes pirms super(...) izsaukšanas, ko izmanto, lai tieši izsauktu vecākklases konstruktoru no mantota klases konstruktora, ja šīs izteiksmes neattiecas uz konstruktora izveidoto gadījumu. class Ārējais { void hello() { System.out.println("Sveiki"); } class Iekšējais { Iekšējais() { sveiks(); super(); } } }
  • FFM (Foreign Function & Memory) API ir stabilizēta, ļaujot Java programmām mijiedarboties ar ārējo kodu un datiem, izsaucot funkcijas no ārējām bibliotēkām un piekļūstot atmiņai ārpus JVM, neizmantojot JNI (Java Native Interface).
  • Ir iespējots nenosaukto mainīgo un modeļu saskaņošanas atbalsts - zvanot neizmantoto, bet nepieciešamo mainīgo un modeļu vietā tagad varat norādīt rakstzīmi “_”. // was String pageName = switch (page) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> “ISSUE #” + issueNumber; ... }; // tagad varat String pageName = switch (page) { case GitHubIssuePage(_, _, _, int issueNumber) -> “ISSUE #” + issueNumber; };
  • Java klases failu parsēšanai, ģenerēšanai un konvertēšanai ir ierosināta klases failu API sākotnējā ieviešana. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(baiti); baits[] 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 utilīta nodrošina iespēju palaist Java programmas, kas tiek piegādātas vairāku koda failu vai iepriekš kompilētu klašu bibliotēku veidā, atsevišķi nekompilējot šos failus un nekonfigurējot būvēšanas sistēmu. Jaunā funkcija atvieglo tādu programmu palaišanu, kurās dažādu klašu kodi ir sadalīti atsevišķos failos. Prog.java: class Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Sveiki!"); } }

    Piemēram, lai palaistu programmu, kas sastāv no diviem failiem "Prog.java" un "Helper.java", tagad pietiek palaist "java Prog.java", kas apkopos Prog klasi, definēs atsauci uz Helper klasi, atrodiet un apkopojiet java failu un izsauciet galveno metodi.

  • Pievienota virkņu veidņu otrā sākotnējā ieviešana, kas ieviesta papildus virkņu literāļiem un teksta blokiem. Virkņu veidnes ļauj apvienot tekstu ar aprēķinātām izteiksmēm un mainīgajiem, neizmantojot operatoru +. Izteiksmju aizstāšana tiek veikta, izmantojot aizvietojumus \{..}, un var pieslēgt īpašus apstrādātājus, lai pārbaudītu aizvietoto vērtību pareizību. Piemēram, SQL dzinējs pārbauda vērtības, kas tiek aizstātas SQL kodā, un atgriež java.sql.Statement objektu kā izvadi, savukārt JSON procesors uzrauga JSON aizstāšanas pareizību un atgriež JsonNode. String query = "SELECT * FROM Person p WHERE p." + rekvizīts + " = '" + vērtība + "'"; // bija Paziņojuma vaicājums = SQL."""SELECT * FROM Person p WHERE p.\{property} = '\{value}'"""; // kļuva
  • Ir pievienots septītais Vector API priekšskatījums, kas nodrošina vektoru aprēķinu funkcijas, kas tiek veiktas, izmantojot vektoru instrukcijas x86_64 un AArch64 procesoros, un ļauj vienlaikus lietot darbības vairākām vērtībām (SIMD). Atšķirībā no HotSpot JIT kompilatora piedāvātajām iespējām skalāro operāciju automātiskai vektorizācijai, jaunais API ļauj skaidri kontrolēt vektorizāciju paralēlai datu apstrādei.
  • Ir pievienota paplašinātā Stream API sākotnējā ieviešana, kas atbalsta jūsu starpposma darbību definēšanu, kas var būt noderīga gadījumos, kad ar esošajām iebūvētajām starpoperācijām nepietiek vēlamajai datu transformācijai. Vietējie apdarinātāji tiek savienoti, izmantojot jauno starpoperāciju Stream::gather(Gatherer), kas apstrādā straumes elementus, tiem piemērojot lietotāja norādītu apdarinātāju. 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]]
  • Testēšanai ir piedāvāta eksperimentālā API strukturētajai vienlaicībai otrā versija, kas vienkāršo vairāku pavedienu lietojumprogrammu izstrādi, apstrādājot vairākus uzdevumus, kas izpildīti dažādos pavedienos kā vienu bloku.
  • Pievienota otra netieši deklarētu klašu un nenosauktu "galvenās" metodes gadījumu sākotnējā ieviešana, kas var iztikt bez publiskām/statiskām deklarācijām, argumentu masīva nodošanas un citām ar klases deklarāciju saistītām entītijām. // bija publiska klase HelloWorld { public static void main(String[] args) { System.out.println("Sveika pasaule!"); } } // tagad varat void main() { System.out.println("Sveika, pasaule!"); }
  • Pievienota otrs tvēruma vērtību priekšskatījuma ieviešana, kas ļauj koplietot nemainīgus datus pa pavedieniem un efektīvi apmainīties ar datiem starp pakārtotajiem pavedieniem (vērtības tiek mantotas). Tiek izstrādātas tvēruma vērtības, lai aizstātu pavedienu lokālo mainīgo mehānismu, un tās ir efektīvākas, ja tiek izmantots ļoti liels skaits virtuālo pavedienu (tūkstošiem vai miljoniem pavedienu). Galvenā atšķirība starp aptvertajām vērtībām un pavedienu lokālajiem mainīgajiem ir tāda, ka pirmie tiek rakstīti vienreiz, tos nevar mainīt nākotnē un tie ir pieejami tikai pavediena izpildes laikā.
  • Paralēlais atkritumu savācējs ir uzlabojis veiktspēju, strādājot ar lieliem objektu masīviem. Optimizācija dažos testos ar lieliem objektu masīviem ļāva samazināt aizkavi pirms objekta meklēšanas par 20%.

Turklāt varat atzīmēt, ka ir publicēts atjauninājums platformai lietojumprogrammu izveidei ar grafisko interfeisu JavaFX 22.

Avots: opennet.ru

Pievieno komentāru