Pagpagawas sa Java SE 22 nga plataporma ug OpenJDK 22 nga open reference nga pagpatuman

Pagkahuman sa unom ka bulan nga pag-uswag, gipagawas sa Oracle ang Java SE 22 (Java Platform, Standard Edition 22), nga naggamit sa open-source nga OpenJDK nga proyekto ingon usa ka pagpatuman sa pakisayran. Gawas sa pagtangtang sa pipila ka karaan nga mga bahin, ang Java SE 22 nagmintinar sa atrasado nga pagkaangay sa mga nauna nga pagpagawas sa Java platform - kadaghanan sa mga nasulat kaniadto nga mga proyekto sa Java molihok nga wala’y mga pagbag-o kung gipadagan sa ilawom sa bag-ong bersyon. Andam-sa-instalar nga pagtukod sa Java SE 22 (JDK, JRE ug Server JRE) giandam alang sa Linux (x86_64, AArch64), Windows (x86_64) ug macOS (x86_64, AArch64). Gipalambo sa proyekto sa OpenJDK, ang pagpatuman sa Java 22 nga reperensiya hingpit nga bukas nga tinubdan ubos sa lisensya sa GPLv2, nga adunay mga eksepsiyon sa GNU ClassPath nga nagtugot sa dinamikong pagsumpay sa mga komersyal nga produkto.

Ang Java SE 22 giklasipikar ingon usa ka regular nga pagpagawas sa suporta ug magpadayon nga makadawat mga update hangtod sa sunod nga pagpagawas. Ang sanga sa Long Term Support (LTS) kinahanglan nga Java SE 21 o Java SE 17, nga makadawat mga update hangtod sa 2031 ug 2029, matag usa (kasagaran magamit hangtod sa 2028 ug 2026). Ang suporta sa publiko alang sa sanga sa LTS sa Java SE 11 natapos kaniadtong Septyembre, apan ang gipalawig nga suporta magpadayon hangtod sa 2032. Ang dugang nga suporta alang sa LTS nga sanga sa Java SE 8 magpadayon hangtod sa 2030.

Pahinumdum kami kanimo nga sugod sa pagpagawas sa Java 10, ang proyekto gibalhin sa usa ka bag-ong proseso sa pag-uswag, nga nagpasabut nga usa ka mas mubo nga siklo alang sa pagporma sa mga bag-ong pagpagawas. Ang bag-ong kagamitan naugmad na karon sa usa ka kanunay nga gi-update nga master branch, nga naglakip sa andam na nga mga pagbag-o ug gikan diin ang mga sanga gisanga matag unom ka bulan aron mapalig-on ang mga bag-ong pagpagawas.

Ang mga bag-ong bahin sa Java 22 naglakip sa:

  • Ang G1 garbage collector naglakip sa suporta alang sa region pinning, nga nagtugot kanimo sa temporaryo nga pag-ayo sa lokasyon sa Java nga mga butang sa memorya aron malikayan kini nga mabalhin sa garbage collector ug aron tugotan ang mga pakisayran niini nga mga butang nga luwas nga mapasa tali sa Java ug lumad nga code. Gitugotan ka sa pag-pin nga makunhuran ang latency ug malikayan ang pag-disable sa koleksyon sa basura kung magpatuman sa mga kritikal nga rehiyon sa JNI (Java Native Interface) nga adunay lumad nga code (samtang gipatuman kini nga mga seksyon, ang JVM kinahanglan dili maglihok sa mga kritikal nga butang nga kauban niini aron malikayan ang kahimtang sa lumba). Ang pag-pin nagtangtang sa mga kritikal nga butang gikan sa pagtan-aw sa tigkolekta sa basura, nga mahimo’g magpadayon sa paglimpyo sa mga lugar nga wala’y pin.
  • Usa ka pasiuna nga bahin ang gidugang aron tugotan ang mga ekspresyon nga matino sa mga konstruktor sa dili pa tawgon ang super(...), gigamit sa dayag nga pagtawag sa usa ka tigtukod sa klase sa ginikanan gikan sa usa ka napanunod nga tigtukod sa klase kung ang mga ekspresyon wala magtumong sa usa ka pananglitan nga gihimo sa konstruktor. class Outer { void hello() { System.out.println("Hello"); } klase Inner {Inner() {hello(); super(); } } }
  • Ang FFM (Foreign Function & Memory) API gipalig-on, nga nagtugot sa interaksyon sa mga programa sa Java nga adunay eksternal nga code ug data pinaagi sa pagtawag sa mga function gikan sa mga eksternal nga librarya ug pag-access sa memorya sa gawas sa JVM, nga dili mogamit sa JNI (Java Native Interface).
  • Ang suporta alang sa wala hinganli nga mga variable ug pattern matching nahimo na - imbis nga wala magamit apan kinahanglan nga mga variable ug pattern kung nagtawag, mahimo nimong ipiho ang karakter nga "_". // was String pageName = switch (panid) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> “ISSUE #” + issueNumber; ... }; // karon mahimo nimong String pageName = switch (panid) { case GitHubIssuePage(_, _, _, int issueNumber) -> “ISSUE #” + issueNumber; };
  • Usa ka pasiuna nga pagpatuman sa Class-File API gisugyot alang sa pag-parse, paghimo, ug pag-convert sa mga file sa klase sa Java. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte [] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> {for (ClassElement ce : classModel) {kung (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). startsWith("debug"))) { classBuilder.with(ce);
  • Ang java utility naghatag ug abilidad sa pagpadagan sa mga programa sa Java, nga gihatag sa porma sa daghang code files o precompiled class library, nga walay gilain nga pag-compile niini nga mga file ug walay pag-configure sa build system. Ang bag-ong feature nagpasayon ​​sa pagpadagan sa mga programa diin ang code sa lain-laing klase gibulag ngadto sa separadong mga file. Prog.java: class Prog {public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Hello!"); }}

    Pananglitan, sa pagpadagan sa usa ka programa nga naglangkob sa duha ka mga file "Prog.java" ug "Helper.java" kini igo na karon sa pagpadagan sa "java Prog.java", nga mag-compile sa Prog klase, define sa usa ka pakisayran sa Helper klase, pagpangita ug pag-compile sa Helper file ug pagtawag sa nag-unang pamaagi.

  • Gidugang ang ikaduhang preliminary nga pagpatuman sa String Templates, gipatuman dugang sa string literals ug text blocks. Gitugotan ka sa mga template sa string nga isagol ang teksto sa mga kalkulado nga ekspresyon ug mga variable nga wala gigamit ang + operator. Ang pag-ilis sa mga ekspresyon gihimo gamit ang mga substitusyon \{..}, ug ang mga espesyal nga tigdumala mahimong konektado aron masusi ang pagkahusto sa gipuli nga mga kantidad. Pananglitan, gisusi sa makina sa SQL ang mga kantidad nga gipuli sa kodigo sa SQL ug gibalik ang usa ka butang nga java.sql.Statement ingon output, samtang ang processor sa JSON nag-monitor sa katukma sa mga pagpuli sa JSON ug gibalik ang usa ka JsonNode. String query = "PILI * GIKAN SA Tawo p ASA p." + kabtangan + " = '" + bili + "'"; // was Statement query = SQL.""" SELECT * FROM Person p DIIN p.\{property} = '\{value}'"""; // nahimong
  • Ang ikapitong preview sa Vector API gidugang, nga naghatag ug mga function para sa mga kalkulasyon sa vector nga gihimo gamit ang mga instruksiyon sa vector sa x86_64 ug AArch64 nga mga processor ug tugotan ang mga operasyon nga magamit dungan sa daghang mga kantidad (SIMD). Dili sama sa mga kapabilidad nga gihatag sa HotSpot JIT compiler para sa auto-vectorization sa scalar operations, ang bag-ong API nagpaposible nga klarong makontrol ang vectorization para sa parallel data processing.
  • Usa ka pasiuna nga pagpatuman sa gipalawig nga Stream API ang gidugang nga nagsuporta sa pagtino sa imong kaugalingon nga intermediate nga mga operasyon, nga mahimong mapuslanon sa mga kaso diin ang naglungtad nga built-in nga intermediate nga mga operasyon dili igo alang sa gitinguha nga pagbag-o sa datos. Ang mga lumad nga handler konektado gamit ang bag-ong intermediate nga operasyon Stream::gather(Gatherer), nga nagproseso sa mga elemento sa stream pinaagi sa paggamit sa usa ka user-specified handler ngadto kanila. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(bag-ong WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Ang ikaduha nga bersyon sa eksperimento nga API alang sa Structured Concurrency gisugyot alang sa pagsulay, nga nagpasimple sa pag-uswag sa multi-threaded nga mga aplikasyon pinaagi sa pagproseso sa daghang mga buluhaton nga gipatuman sa lainlaing mga hilo ingon usa ka bloke.
  • Gidugang ang ikaduha nga pasiuna nga pagpatuman sa dili klaro nga gipahayag nga mga klase ug wala hinganli nga mga higayon sa "panguna" nga pamaagi, nga mahimo’g mawala ang publiko / static nga mga deklarasyon, pagpasa sa daghang mga argumento, ug uban pang mga entidad nga adunay kalabotan sa usa ka deklarasyon sa klase. // was public class HelloWorld {public static void main(String[] args) { System.out.println("Hello world!"); } } // karon mahimo nimong i-void main() { System.out.println("Hello, World!"); }
  • Gidugang ang ikaduha nga pag-implementar sa preview sa Scoped Values, nga nagtugot sa dili mausab nga datos nga ipaambit sa mga thread ug data nga maayo nga gibaylo sa taliwala sa mga thread sa bata (mga bili ang napanunod). Ang Scoped Values ​​gipalambo aron mapulihan ang mekanismo sa thread-local variables ug mas episyente kung mogamit ug daghan kaayong virtual nga mga thread (libo o milyon-milyong mga thread). Ang nag-unang kalainan tali sa Scoped Values ​​ug thread-local variables mao nga ang nahauna gisulat kausa, dili mausab sa umaabot, ug magpabilin nga magamit lamang sa gidugayon sa pagpatuman sa thread.
  • Ang Parallel garbage collector nakapauswag sa performance sa dihang nagtrabaho uban sa dagkong arrays sa mga butang. Ang pag-optimize nagpaposible sa pipila ka mga pagsulay nga adunay daghang mga han-ay sa mga butang aron makunhuran ang paglangan sa dili pa magsugod sa pagpangita sa usa ka butang sa 20%.

Dugang pa, mahimo nimong matikdan ang pagmantala sa usa ka update sa plataporma alang sa paghimo og mga aplikasyon nga adunay usa ka graphical interface JavaFX 22.

Source: opennet.ru

Idugang sa usa ka comment