Vrystelling van Java SE 22 platform en OpenJDK 22 oop verwysing implementering

Na ses maande van ontwikkeling het Oracle die Java SE 22-platform (Java Platform, Standard Edition 22) vrygestel, wat die oopbron OpenJDK-projek as verwysingsimplementering gebruik. Met die uitsondering van die verwydering van sommige verouderde funksies, handhaaf Java SE 22 terugwaartse versoenbaarheid met vorige weergawes van die Java-platform—meeste voorheen geskrewe Java-projekte sal onveranderd loop wanneer dit onder die nuwe weergawe loop. Gereed-om-te-installeer weergawes van Java SE 22 (JDK, JRE en Server JRE) word voorberei vir... Linux (x86_64, AArch64), Windows (x86_64) en macOS (x86_64, AArch64). Ontwikkel deur die OpenJDK-projek, is die Java 22-verwysingsimplementering volledig oopbron onder die GPLv2-lisensie met die GNU ClassPath-uitsondering, wat dinamiese skakeling met kommersiële produkte moontlik maak.

Java SE 22 word geklassifiseer as 'n gereelde ondersteuningsvrystelling en sal voortgaan om opdaterings te ontvang tot die volgende vrystelling. Die Langtermyn Ondersteuning (LTS)-tak moet Java SE 21 of Java SE 17 wees, wat opdaterings tot onderskeidelik 2031 en 2029 sal ontvang (algemeen beskikbaar tot 2028 en 2026). Openbare ondersteuning vir die LTS-tak van Java SE 11 het verlede September geëindig, maar verlengde ondersteuning sal tot 2032 voortduur. Uitgebreide ondersteuning vir die LTS-tak van Java SE 8 sal tot 2030 voortduur.

Laat ons u daaraan herinner dat die projek begin met die vrystelling van Java 10 oorgeskakel het na 'n nuwe ontwikkelingsproses, wat 'n korter siklus vir die vorming van nuwe vrystellings impliseer. Nuwe funksionaliteit word nou ontwikkel in een voortdurend bygewerkte meestertak, wat klaargemaakte veranderinge insluit en waaruit takke elke ses maande vertak word om nuwe vrystellings te stabiliseer.

Nuwe kenmerke in Java 22 sluit in:

  • Die G1 vullisverwyderaar sluit ondersteuning in vir streekvaspen, wat jou toelaat om die ligging van Java-voorwerpe tydelik in die geheue vas te stel om te verhoed dat dit deur die vullisverwyderaar geskuif word en om verwysings na hierdie voorwerpe veilig tussen Java en inheemse kode te laat deurgee. Vasspeld laat jou toe om latensie te verminder en te verhoed dat vullisversameling gedeaktiveer word wanneer kritieke streke van JNI (Java Native Interface) met inheemse kode uitgevoer word (terwyl hierdie afdelings uitgevoer word, moet die JVM nie kritieke voorwerpe wat daarmee geassosieer word, skuif om rastoestande te vermy nie). Vasspeld verwyder kritieke voorwerpe uit die oog van die vullisverwyderaar, wat kan voortgaan om oopgespelde areas skoon te maak.
  • 'n Voorlopige kenmerk is bygevoeg om uitdrukkings toe te laat om in konstruktors gespesifiseer te word voordat super(...) geroep word, wat gebruik word om 'n ouerklaskonstruktor uitdruklik van 'n oorgeërfde klaskonstruktor te noem as daardie uitdrukkings nie verwys na 'n instansie wat deur die konstruktor geskep is nie. klas Buitenste { void hallo() { System.out.println("Hallo"); } klas Inner { Inner() { hallo(); super(); } } }
  • Die FFM (Foreign Function & Memory) API is gestabiliseer, wat interaksie van Java-programme met eksterne kode en data moontlik maak deur funksies van eksterne biblioteke op te roep en toegang tot geheue buite die JVM te verkry, sonder om JNI (Java Native Interface) te gebruik.
  • Ondersteuning vir naamlose veranderlikes en patroonpassing is geaktiveer - in plaas van ongebruikte maar noodsaaklike veranderlikes en patrone wanneer jy roep, kan jy nou die "_" karakter spesifiseer. // was String pageName = switch (bladsy) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> “ISSUE #” + issueNumber; ... }; // nou kan jy String pageName = skakel (bladsy) { case GitHubIssuePage(_, _, _, int issueNumber) -> “ISSUE #” + issueNumber; };
  • 'n Voorlopige implementering van die Class-File API word voorgestel vir die ontleding, generering en omskakeling van Java-klaslêers. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(grepe); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). beginWith("debug"))) { klasbouer.met(ce);
  • Die java-nutsding bied die vermoë om Java-programme te laat loop, verskaf in die vorm van verskeie kodelêers of vooraf saamgestelde klasbiblioteke, sonder om hierdie lêers afsonderlik saam te stel en sonder om die boustelsel te konfigureer. Die nuwe kenmerk maak dit makliker om programme te laat loop waarin die kode van verskillende klasse in aparte lêers geskei word. Prog.java: klas Prog { publieke statiese leemte hoof(String[] args) { Helper.run(); } } Helper.java: klas Helper { static void run() { System.out.println("Hallo!"); } }

    Byvoorbeeld, om 'n program te laat loop wat uit twee lêers "Prog.java" en "Helper.java" bestaan, is dit nou voldoende om "java Prog.java" uit te voer, wat die Prog-klas sal saamstel, 'n verwysing na die Helper-klas definieer, vind en stel die Helper-lêer saam en roep die hoofmetode.

  • Bygevoeg 'n tweede voorlopige implementering van String Templates, geïmplementeer bykomend tot string letterlikes en teksblokke. String sjablone laat jou toe om teks met berekende uitdrukkings en veranderlikes te kombineer sonder om die + operateur te gebruik. Vervanging van uitdrukkings word uitgevoer deur gebruik te maak van substitusies \{..}, en spesiale hanteerders kan gekoppel word om die korrektheid van die gesubstitueerde waardes na te gaan. Byvoorbeeld, die SQL-enjin kontroleer die waardes wat in die SQL-kode vervang word en gee 'n java.sql.Statement-objek as uitvoer terug, terwyl die JSON-verwerker die korrektheid van die JSON-vervangings monitor en 'n JsonNode terugstuur. String query = "SELECT * FROM Persoon p WHERE p." + eiendom + " = '" + waarde + "'"; // was Stellingnavraag = SQL."""SELECT * FROM Persoon p WHERE p.\{property} = '\{waarde}'""""; // geword
  • 'n Sewende voorskou van die Vector API is bygevoeg, wat funksies verskaf vir vektorberekeninge wat uitgevoer word met behulp van vektorinstruksies op x86_64- en AArch64-verwerkers en laat toe dat bewerkings gelyktydig op veelvuldige waardes (SIMD) toegepas word. Anders as die vermoëns wat in die HotSpot JIT-samesteller voorsien word vir outo-vektorisering van skalêre bewerkings, maak die nuwe API dit moontlik om vektorisering vir parallelle dataverwerking eksplisiet te beheer.
  • 'n Voorlopige implementering van die uitgebreide Stream API is bygevoeg wat die definisie van jou eie intermediêre bewerkings ondersteun, wat nuttig kan wees in gevalle waar bestaande ingeboude intermediêre bewerkings nie voldoende is vir die verlangde datatransformasie nie. Inheemse hanteerders word verbind met behulp van die nuwe intermediêre bewerking Stream::gather(Gatherer), wat stroomelemente verwerk deur 'n gebruiker-gespesifiseerde hanteerder op hulle toe te pas. 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]]
  • 'n Tweede weergawe van die eksperimentele API vir gestruktureerde sameloop is voorgestel vir toetsing, wat die ontwikkeling van multi-draadtoepassings vereenvoudig deur verskeie take wat in verskillende drade uitgevoer word, as 'n enkele blok te verwerk.
  • Bygevoeg 'n tweede voorlopige implementering van implisiet verklaarde klasse en naamlose gevalle van die "hoof" metode, wat kan afsien van publieke/statiese verklarings, deur 'n verskeidenheid argumente deur te gee, en ander entiteite wat met 'n klasverklaring geassosieer word. // was publieke klas HelloWorld { publieke statiese leemte hoof(String[] args) { System.out.println("Hallo wêreld!"); } } // nou kan jy main() { System.out.println("Hallo, Wêreld!") ongeldig maak; }
  • Het 'n tweede voorskou-implementering van Scoped Values ​​bygevoeg, sodat onveranderlike data oor drade gedeel kan word en data doeltreffend tussen kinderdrade uitgeruil kan word (waardes word geërf). Omvangwaardes word ontwikkel om die draad-plaaslike veranderlikes-meganisme te vervang en is meer doeltreffend wanneer baie groot getalle virtuele drade (duisende of miljoene drade) gebruik word. Die belangrikste verskil tussen Scoped Values ​​en draad-plaaslike veranderlikes is dat eersgenoemde een keer geskryf word, nie in die toekoms verander kan word nie en slegs beskikbaar bly vir die duur van die draad se uitvoering.
  • Die Parallelle vullisverwyderaar het verbeterde werkverrigting wanneer daar met groot verskeidenheid voorwerpe gewerk word. Optimalisering het dit in sommige toetse met groot skikkings voorwerpe moontlik gemaak om die vertraging te verminder voordat na 'n voorwerp begin soek is met 20%.

Daarbenewens kan u let op die publikasie van 'n opdatering aan die platform vir die skep van toepassings met 'n grafiese koppelvlak JavaFX 22.

Bron: opennet.ru

Koop betroubare hosting vir werwe met DDoS-beskerming, VPS VDS-bedieners 🔥 Koop betroubare webwerfhosting met DDoS-beskerming, VPS VDS-bedieners | ProHoster