Liberigo de Java SE 22 platformo kaj OpenJDK 22 malferma referenca efektivigo

Post ses monatoj da evoluo, Oracle publikigis Java SE 22 (Java Platform, Standard Edition 22), kiu uzas la OpenJDK malfermfontecan projekton kiel sian referencan efektivigon. Escepte de la forigo de kelkaj malnoviĝintaj funkcioj, Java SE 22 konservas malantaŭan kongruon kun antaŭaj eldonoj de la Java platformo - la plej multaj antaŭe verkitaj Java-projektoj funkcios sen ŝanĝoj kiam ili funkcias sub la nova versio. Pretaj instalaĵoj de Java SE 22 (JDK, JRE kaj Server JRE) estas pretaj por Linukso (x86_64, AArch64), Vindozo (x86_64) kaj macOS (x86_64, AArch64). Disvolvita de la OpenJDK-projekto, la referenca efektivigo de Java 22 estas plene malfermfonta laŭ la permesilo GPLv2, kun GNU ClassPath-esceptoj permesantaj dinamikan ligon kun komercaj produktoj.

Java SE 22 estas klasifikita kiel regula subtena eldono kaj daŭre ricevos ĝisdatigojn ĝis la venonta eldono. La branĉo Long Term Support (LTS) devus esti Java SE 21 aŭ Java SE 17, kiuj ricevos ĝisdatigojn ĝis 2031 kaj 2029, respektive (ĝenerale disponebla ĝis 2028 kaj 2026). Publika subteno por la LTS-filio de Java SE 11 finiĝis la pasintan septembron, sed plilongigita subteno daŭros ĝis 2032. Plilongigita subteno por la LTS-filio de Java SE 8 daŭros ĝis 2030.

Ni memorigu vin, ke ekde la liberigo de Java 10, la projekto ŝanĝis al nova evoluprocezo, kio implicas pli mallongan ciklon por la formado de novaj eldonoj. Nova funkcieco nun estas evoluigita en unu konstante ĝisdatigita majstra branĉo, kiu inkluzivas pretajn ŝanĝojn kaj de kiuj branĉoj estas disbranĉigitaj ĉiujn ses monatojn por stabiligi novajn eldonojn.

Novaj funkcioj en Java 22 inkluzivas:

  • La rubkolektisto G1 inkluzivas subtenon por regionpinglado, kiu ebligas al vi provizore fiksi la lokon de Java objektoj en memoro por eviti ke ili estu movitaj de la rubkolektanto kaj permesi referencojn al ĉi tiuj objektoj esti sekure pasitaj inter Java kaj indiĝena kodo. Alpinglado permesas vin redukti latencian kaj eviti malfunkciigi rubkolekton dum ekzekuto de kritikaj regionoj de JNI (Java Native Interface) kun denaska kodo (dum plenumado de ĉi tiuj sekcioj, la JVM ne devus movi kritikajn objektojn asociitajn kun ili por eviti raskondiĉojn). Alpinglado forigas kritikajn objektojn de la vido de la rubkolektanto, kiu povas daŭri purigi nealpinglitajn areojn.
  • Prepara trajto estis aldonita por permesi al esprimoj esti specifitaj en konstrukciistoj antaŭ vokado de super(...), uzata por eksplicite voki gepatran klaskonstruktilon de heredita klaskonstrukciisto se tiuj esprimoj ne rilatas al kazo kreita de la konstrukciisto. klaso Ekstera { void saluton () { System.out.println ("Saluton"); } klaso Interna { Interna () { saluton (); super(); } } }
  • La FFM (Foreign Function & Memory) API estis stabiligita, permesante interagadon de Java programoj kun ekstera kodo kaj datenoj vokante funkciojn de eksteraj bibliotekoj kaj alirante memoron ekster la JVM, sen recurri al uzado de JNI (Java Native Interface).
  • Subteno por nenomitaj variabloj kaj kongruo de ŝablonoj estas ebligita - anstataŭ neuzataj sed necesaj variabloj kaj ŝablonoj dum vokado, vi nun povas specifi la signon “_”. // was String pageName = ŝaltilo (paĝo) { case GitHubIssuePage (var url, var enhavo, var ligiloj, int issueNumber) -> “PROBLEMO #” + issueNumber; ... }; // nun vi povas String pageName = switch (page) { case GitHubIssuePage (_, _, _, int issueNumber) -> “ISSUE #” + issueNumber; };
  • Prepara efektivigo de la Class-File API estas proponita por analizado, generado kaj konvertado de Java klasdosieroj. ClassFile cf = ClassFile.of (); ClassModel klasmodelo = cf.parse(bajtoj); bajto[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). startsWith("sencimigi"))) { classBuilder.with(ce);
  • La java ilo disponigas la kapablon ruli Java programojn, provizitajn en la formo de pluraj koddosieroj aŭ antaŭkompilitaj klasbibliotekoj, sen aparte kompili tiujn dosierojn kaj sen agordi la konstrusistemon. La nova funkcio faciligas ruli programojn en kiuj la kodo de malsamaj klasoj estas apartigita en apartajn dosierojn. Prog.java: klaso Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Saluton!"); }}

    Ekzemple, por ruli programon konsistantan el du dosieroj "Prog.java" kaj "Helper.java" nun sufiĉas ruli "java Prog.java", kiu kompilos la Prog-klason, difinos referencon al la Helper-klaso, trovi kaj kompili la helpan dosieron java kaj voki la ĉefan metodon.

  • Aldonis duan preparan efektivigon de Ŝnuraj Ŝablonoj, efektivigita aldone al ĉenvortaĵoj kaj tekstoblokoj. Ŝenraj ŝablonoj permesas vin kombini tekston kun kalkulitaj esprimoj kaj variabloj sen uzi la operatoron +. Anstataŭigo de esprimoj estas efektivigita uzante anstataŭaĵojn \{..}, kaj specialaj pritraktiloj povas esti konektitaj por kontroli la ĝustecon de la anstataŭigitaj valoroj. Ekzemple, la SQL-motoro kontrolas la valorojn anstataŭitajn en la SQL-kodon kaj resendas java.sql.Statement objekton kiel eligo, dum la JSON-procesoro kontrolas la ĝustecon de la JSON-anstataŭiĝoj kaj resendas JsonNode. Stringdemando = "SELECT * FROM Persono p WHERE p." + proprieto + " = '" + valoro + "'"; // was Statement query = SQL."""SELECT * FROM Person p WHERE p.\{property} = '\{valoro}'"""; // fariĝis
  • Sepa antaŭprezento de la Vektora API estis aldonita, provizante funkciojn por vektoraj kalkuloj, kiuj estas faritaj per vektoraj instrukcioj sur x86_64 kaj AArch64-procesoroj kaj permesas operaciojn esti aplikataj samtempe al multoblaj valoroj (SIMD). Male al la kapabloj disponigitaj en la HotSpot JIT-kompililo por aŭto-vektorizado de skalaraj operacioj, la nova API ebligas eksplicite kontroli vektorigon por paralela datumtraktado.
  • Prepara efektivigo de la plilongigita Stream API estis aldonita, kiu subtenas difini viajn proprajn mezajn operaciojn, kiuj povas esti utilaj en kazoj kie ekzistantaj enkonstruitaj mezaj operacioj ne sufiĉas por la dezirata datuma transformo. Denaskaj pritraktiloj estas konektitaj per la nova meza operacio Stream::gather(Gatherer), kiu prilaboras fluelementojn aplikante uzant-specifitan prizorganton al ili. 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]]
  • Dua versio de la eksperimenta API por Structured Concurrency estis proponita por testado, kiu simpligas la evoluon de plurfadenaj aplikoj prilaborante multoblajn taskojn efektivigitajn en malsamaj fadenoj kiel ununura bloko.
  • Aldonis duan preparan efektivigon de implicite deklaritaj klasoj kaj nenomitaj okazoj de la "ĉefa" metodo, kiu povas malhavi publikajn/senmovajn deklarojn, pasigante aron da argumentoj, kaj aliajn estaĵojn asociitajn kun klasdeklaro. // was public class HelloWorld { public static void main(String[] args) { System.out.println("Saluton mondo!"); } } // nun vi povas nuligi ĉef() { System.out.println("Saluton, Mondo!"); }
  • Aldonis duan antaŭrigardan efektivigon de Scoped Values, ebligante neŝanĝeblajn datumojn esti dividitaj tra fadenoj kaj datumoj efike interŝanĝitaj inter infanaj fadenoj (valoroj estas hereditaj). Ampleksaj Valoroj estas disvolvitaj por anstataŭigi la mekanismon de faden-lokaj variabloj kaj estas pli efikaj kiam oni uzas tre grandajn nombrojn da virtualaj fadenoj (miloj aŭ milionoj da fadenoj). La ĉefa diferenco inter Skopaj Valoroj kaj faden-lokaj variabloj estas, ke la unuaj estas skribitaj unufoje, ne povas esti ŝanĝitaj estonte kaj restas disponeblaj nur dum la daŭro de la ekzekuto de la fadeno.
  • La Paralela rubkolektanto plibonigis rendimenton kiam vi laboras kun grandaj aroj de objektoj. Optimumigo ebligis en kelkaj testoj kun grandaj aroj da objektoj redukti la prokraston antaŭ komenci serĉi objekton je 20%.

Aldone, vi povas noti la publikigon de ĝisdatigo al la platformo por krei aplikaĵojn kun grafika interfaco JavaFX 22.

fonto: opennet.ru

Aldoni komenton