Release fan Java SE 22 platfoarm en OpenJDK 22 iepen referinsje ymplemintaasje

Nei seis moannen fan ûntwikkeling hat Oracle it platfoarm Java SE 22 (Java Platform, Standard Edition 22) frijlitten, dat it OpenJDK-iepenboarne-projekt brûkt as referinsjeimplementaasje. Mei útsûndering fan it fuortheljen fan guon ferâldere funksjes, behâldt Java SE 22 efterútkompatibiliteit mei eardere releases fan it Java-platfoarm - de measte earder skreaune Java-projekten sille noch wurkje sûnder wiziging as se rinne ûnder de nije ferzje. Ynstalleare builds fan Java SE 22 (JDK, JRE, en Server JRE) binne taret foar Linux (x86_64, AArch64), Windows (x86_64), en macOS (x86_64, AArch64). Ûntwikkele troch it OpenJDK projekt, de Java 22 referinsje ymplemintaasje is folslein iepen ûnder de GPLv2 lisinsje mei GNU ClassPath útsûnderings om dynamyske keppele oan kommersjele produkten.

Java SE 22 is klassifisearre as in reguliere stipeferzje en sil updates trochgean oant de folgjende release. De tûke foar Long Term Support (LTS) moat Java SE 21 of Java SE 17 wêze, dy't updates sille ûntfange oant respektivelik 2031 en 2029 (algemien beskikber oant 2028 en 2026). Iepenbiere stipe foar de LTS-tûke fan Java SE 11 einige ferline septimber, mar útwreide stipe sil trochgean oant 2032. Utwreide stipe foar de LTS-tûke fan Java SE 8 sil trochgean oant 2030.

Lit ús jo herinnerje dat te begjinnen mei de frijlitting fan Java 10, it projekt oerstapt nei in nij ûntwikkelingsproses, wat in koartere syklus betsjuttet foar de foarming fan nije releases. Nije funksjonaliteit is no ûntwikkele yn ien konstant bywurke mastertûke, dy't klear makke wizigingen omfettet en wêrfan tûken elke seis moanne fertakke wurde om nije releases te stabilisearjen.

Nije funksjes yn Java 22 omfetsje:

  • De G1 garbage collector omfettet stipe foar regio pinning, wêrtroch jo de lokaasje fan Java-objekten tydlik yn it ûnthâld kinne reparearje om te foarkommen dat se wurde ferpleatst troch de garbage collector en om ferwizings nei dizze objekten feilich troch te jaan tusken Java en native koade. Pinning lit jo de latency ferminderje en foarkommen fan it útskeakeljen fan garbagecollection by it útfieren fan krityske regio's fan JNI (Java Native Interface) mei native koade (by it útfieren fan dizze seksjes moat de JVM gjin krityske objekten ferpleatse dy't mei har ferbûn binne om racebetingsten te foarkommen). Pinning ferwideret krityske objekten út it sicht fan 'e jiskefet, dy't kinne trochgean mei it skjinmeitsjen fan unpinned gebieten.
  • In foarriedige funksje is tafoege om te tastean útdrukkingen wurde oantsjutte yn constructors foardat ropt super (...), brûkt om eksplisyt neame in âlder klasse constructor út in erfde klasse constructor as dy útdrukkings net ferwize nei in eksimplaar makke troch de constructor. class Outer { void hello () { System.out.println ("Hallo"); } klasse Binnen { Binnen() { hello(); super(); } } }
  • De FFM (Foreign Function & Memory) API is stabilisearre, wêrtroch ynteraksje fan Java-programma's mei eksterne koade en gegevens mooglik is troch funksjes fan eksterne bibleteken op te roppen en tagong te krijen ta ûnthâld bûten de JVM, sûnder taflecht te brûken JNI (Java Native Interface).
  • Stipe foar net neamde fariabelen en patroan oerienkomst is ynskeakele - yn stee fan net brûkte, mar needsaaklike fariabelen en patroanen by it roppen, kinne jo no it "_" karakter opjaan. // wie String pageName = switch (side) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> “ISSUE #” + issueNumber; ... }; // no kinne jo String pageName = switch (side) { case GitHubIssuePage(_, _, _, int issueNumber) -> “ISSUE #” + issueNumber; };
  • In foarriedige ymplemintaasje fan de Class-File API wurdt foarsteld foar it parsearjen, generearjen en konvertearjen fan Java-klassebestannen. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); 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);
  • It java-hulpprogramma biedt de mooglikheid om Java-programma's út te fieren, levere yn 'e foarm fan ferskate koadebestannen as pre-kompilearre klassebiblioteken, sûnder dizze bestannen apart te kompilearjen en sûnder it bouwensysteem te konfigurearjen. De nije funksje makket it makliker om programma's út te fieren wêryn't de koade fan ferskate klassen yn aparte bestannen skieden is. Prog.java: klasse Prog { iepenbiere statyske void main (String [] args) { Helper.run (); } } Helper.java: class Helper { static void run() { System.out.println("Hallo!"); } }

    Bygelyks, om in programma út te fieren dat bestiet út twa bestannen "Prog.java" en "Helper.java" is it no genôch om "java Prog.java" út te fieren, dat de Prog-klasse kompilearret, in ferwizing nei de Helper-klasse definiearje, fyn en kompilearje it Helper-bestân java en rop de haadmetoade.

  • In twadde foarriedige ymplemintaasje tafoege fan String Templates, ymplementearre neist tekenrige letters en tekstblokken. String-sjabloanen kinne jo tekst kombinearje mei berekkene útdrukkingen en fariabelen sûnder de + operator te brûken. Ferfanging fan útdrukkingen wurdt útfierd mei ferfangings \{..}, en spesjale handlers kinne wurde ferbûn om de krektens fan 'e ferfongen wearden te kontrolearjen. Bygelyks, de SQL-motor kontrolearret de wearden dy't wurde ferfongen yn 'e SQL-koade en jout in java.sql.Statement-objekt as útfier, wylst de JSON-prosessor de korrektheid fan' e JSON-ferfangings kontrolearret en in JsonNode werombringt. String query = "SELECT * FROM Persoan p WHERE p." + eigenskip + " = '" + wearde + "'"; // wie Statement query = SQL."""SELECT * FROM Persoan p WHERE p.\{property} = '\{wearde}'""""; // waard
  • In sânde foarbyld fan 'e Vector API is tafoege, it leveret funksjes foar fektorberekkeningen dy't wurde útfierd mei fektorynstruksjes op x86_64- en AArch64-processors en kinne operaasjes tagelyk tapast wurde op meardere wearden (SIMD). Oars as de mooglikheden oanbean yn 'e HotSpot JIT-kompiler foar auto-vektorisaasje fan skalêre operaasjes, makket de nije API it mooglik om eksplisyt fektorisaasje te kontrolearjen foar parallelle gegevensferwurking.
  • In foarriedige ymplemintaasje fan de útwreide Stream API is tafoege dy't stipet it definiearjen fan jo eigen tuskenlizzende operaasjes, wat kin nuttich wêze yn gefallen dêr't besteande ynboude tuskenbeiden operaasjes binne net genôch foar de winske gegevens transformaasje. Native handlers wurde ferbûn mei de nije tuskenbewurking Stream :: gather (Gatherer), dy't streameleminten ferwurket troch in troch de brûker spesifisearre handler op har ta te passen. 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]]
  • In twadde ferzje fan 'e eksperimintele API foar Structured Concurrency is foarsteld foar testen, dy't de ûntwikkeling fan multi-threaded applikaasjes simplifies troch it ferwurkjen fan meardere taken útfierd yn ferskate threaden as ien blok.
  • In twadde foarriedige ymplemintaasje tafoege fan ymplisyt ferklearre klassen en net neamde eksimplaren fan 'e "haad" metoade, dy't kinne ûntslaan fan iepenbiere / statyske deklaraasjes, trochjaan fan in array fan arguminten, en oare entiteiten ferbûn mei in klasseferklearring. // wie iepenbiere klasse HelloWorld {publike statyske void haad (String[] args) {System.out.println ("Hallo wrâld!"); } } // no kinne jo de main() { System.out.println("Hallo, Wrâld!") annulearje; }
  • In twadde preview-ymplemintaasje tafoege fan Scoped Values, wêrtroch ûnferoarlike gegevens kinne wurde dield oer threads en gegevens effisjint útwiksele tusken bernethreads (wearden binne erfd). Scoped Wearden wurde ûntwikkele om it meganisme fan thread-lokale fariabelen te ferfangen en binne effisjinter by it brûken fan heul grutte oantallen firtuele threads (tûzenen of miljoenen threads). It wichtichste ferskil tusken Scoped Values ​​en thread-lokale fariabelen is dat de eardere ien kear skreaun binne, net yn 'e takomst kinne wurde feroare, en allinich beskikber bliuwe foar de doer fan' e útfiering fan 'e thread.
  • De Parallel garbage collector hat ferbettere prestaasjes by it wurkjen mei grutte arrays fan objekten. Optimalisaasje makke it yn guon tests mei grutte arrays fan objekten mooglik om de fertraging te ferminderjen foardat jo begjinne te sykjen nei in objekt mei 20%.

Derneist kinne jo de publikaasje fan in update foar it platfoarm notearje foar it meitsjen fan applikaasjes mei in grafyske interface JavaFX 22.

Boarne: opennet.ru

Add a comment