Rhyddhau platfform Java SE 22 a gweithrediad cyfeirio agored OpenJDK 22

Ar ôl chwe mis o ddatblygiad, mae Oracle wedi rhyddhau platfform Java SE 22 (Java Platform, Standard Edition 22), sy'n defnyddio prosiect ffynhonnell agored OpenJDK fel gweithrediad cyfeirio. Ac eithrio dileu rhai nodweddion anghymeradwy, mae Java SE 22 yn cynnal cydnawsedd yn ôl â datganiadau blaenorol y platfform Java - bydd y rhan fwyaf o brosiectau Java a ysgrifennwyd yn flaenorol yn dal i weithio heb eu haddasu pan fyddant yn cael eu rhedeg o dan y fersiwn newydd. Mae adeiladau gosodadwy o Java SE 22 (JDK, JRE, a Server JRE) yn cael eu paratoi ar gyfer Linux (x86_64, AArch64), Windows (x86_64), a macOS (x86_64, AArch64). Wedi'i ddatblygu gan y prosiect OpenJDK, mae gweithrediad cyfeirio Java 22 yn ffynhonnell agored lawn o dan y drwydded GPLv2 gydag eithriadau GNU ClassPath i ganiatáu cysylltu deinamig â chynhyrchion masnachol.

Mae Java SE 22 wedi'i ddosbarthu fel datganiad cymorth rheolaidd a bydd yn parhau i dderbyn diweddariadau tan y datganiad nesaf. Dylai'r gangen Cymorth Tymor Hir (LTS) fod yn Java SE 21 neu Java SE 17, a fydd yn derbyn diweddariadau tan 2031 a 2029, yn y drefn honno (ar gael yn gyffredinol tan 2028 a 2026). Daeth cefnogaeth y cyhoedd i gangen LTS o Java SE 11 i ben fis Medi diwethaf, ond bydd cefnogaeth estynedig yn parhau tan 2032. Bydd cefnogaeth estynedig i gangen LTS o Java SE 8 yn parhau tan 2030.

Gadewch inni eich atgoffa, gan ddechrau gyda rhyddhau Java 10, bod y prosiect wedi newid i broses ddatblygu newydd, gan awgrymu cylch byrrach ar gyfer ffurfio datganiadau newydd. Mae swyddogaethau newydd bellach yn cael eu datblygu mewn un brif gangen sy'n cael ei diweddaru'n gyson, sy'n cynnwys newidiadau parod ac y mae canghennau'n cael eu canghennu ohoni bob chwe mis i sefydlogi datganiadau newydd.

Mae nodweddion newydd yn Java 22 yn cynnwys:

  • Mae casglwr sbwriel G1 yn cynnwys cefnogaeth ar gyfer pinio rhanbarth, sy'n eich galluogi i osod lleoliad gwrthrychau Java dros dro yn y cof er mwyn osgoi iddynt gael eu symud gan y casglwr sbwriel ac i ganiatáu i gyfeiriadau at y gwrthrychau hyn gael eu trosglwyddo'n ddiogel rhwng Java a chod brodorol. Mae pinio yn caniatáu ichi leihau cuddni ac osgoi analluogi casglu sbwriel wrth weithredu rhanbarthau critigol JNI (Rhyngwyneb Brodorol Java) â chod brodorol (wrth weithredu'r adrannau hyn, ni ddylai'r JVM symud gwrthrychau critigol sy'n gysylltiedig â nhw er mwyn osgoi amodau hil). Mae pinio yn tynnu gwrthrychau critigol o olwg y casglwr sbwriel, a all barhau i lanhau ardaloedd heb eu pinio.
  • Mae nodwedd ragarweiniol wedi'i hychwanegu i ganiatáu i ymadroddion gael eu nodi mewn llunwyr cyn galw uwch (...), a ddefnyddir i alw'n benodol adeiladwr dosbarth rhiant o adeiladwr dosbarth etifeddol os nad yw'r ymadroddion hynny'n cyfeirio at enghraifft a grëwyd gan yr adeiladwr. dosbarth Allanol { gwag helo() { System.out.println("Helo"); } dosbarth Mewnol { Mewnol() { helo(); uwch(); } } }
  • Mae'r API FFM (Swyddogaeth a Chof Tramor) wedi'i sefydlogi, gan ganiatáu rhyngweithio rhaglenni Java â chod a data allanol trwy alw swyddogaethau o lyfrgelloedd allanol a chyrchu cof y tu allan i'r JVM, heb droi at ddefnyddio JNI (Java Native Interface).
  • Mae cefnogaeth ar gyfer newidynnau dienw a pharu patrwm wedi'i alluogi - yn lle newidynnau a phatrymau nas defnyddiwyd ond sy'n angenrheidiol wrth alw, gallwch nawr nodi'r nod “_”. // was String pageName = switsh (tudalen) { achos GitHubIssuePage(var url, var content, var links, int issueNumber) -> “ISSUE #” + issueNumber; ... }; // nawr gallwch Llinyn pageName = switsh (tudalen) { achos GitHubIssuePage(_, _, _, int issueNumber) -> “ISSUE #” + issueNumber; };
  • Cynigir gweithrediad rhagarweiniol o'r API Class-File ar gyfer dosrannu, cynhyrchu a throsi ffeiliau dosbarth Java. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(beit); beit[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { ar gyfer (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). startWith("debug")) { classBuilder.with(ce);
  • Mae'r cyfleustodau java yn darparu'r gallu i redeg rhaglenni Java, a gyflenwir ar ffurf sawl ffeil cod neu lyfrgelloedd dosbarth wedi'u llunio ymlaen llaw, heb gasglu'r ffeiliau hyn ar wahân a heb ffurfweddu'r system adeiladu. Mae'r nodwedd newydd yn ei gwneud hi'n haws rhedeg rhaglenni lle mae cod gwahanol ddosbarthiadau wedi'i wahanu'n ffeiliau ar wahân. Prog.java: dosbarth Prog { prif gyflenwad gwag statig cyhoeddus (Llinynnol[] args) { Helper.run(); } } Helper.java: Class Helper { rhediad gwag statig() { System.out.println("Helo!"); } }

    Er enghraifft, i redeg rhaglen sy'n cynnwys dwy ffeil "Prog.java" a "Helper.java" mae bellach yn ddigon i redeg "java Prog.java", a fydd yn llunio'r dosbarth Prog, diffinio cyfeiriad at y dosbarth Helper, darganfod a llunio'r ffeil Helper java a galw'r prif ddull.

  • Ychwanegwyd ail weithrediad rhagarweiniol o Dempledi Llinynnol, wedi'i roi ar waith yn ogystal â llythrennau llinynnol a blociau testun. Mae templedi llinynnol yn caniatáu ichi gyfuno testun ag ymadroddion a newidynnau wedi'u cyfrifo heb ddefnyddio'r gweithredwr +. Mae amnewid ymadroddion yn cael ei wneud gan ddefnyddio amnewidion \{..}, a gellir cysylltu trinwyr arbennig i wirio cywirdeb y gwerthoedd a amnewidiwyd. Er enghraifft, mae'r injan SQL yn gwirio'r gwerthoedd sy'n cael eu hamnewid yn y cod SQL ac yn dychwelyd gwrthrych java.sql.Statement fel allbwn, tra bod y prosesydd JSON yn monitro cywirdeb yr eilyddion JSON ac yn dychwelyd JsonNode. String query = "SELECT * GAN Person p LLE p." + property + " = ' " +gwerth +"'"; // was Statement query = SQL."" "SELECT * FROM Person p WHERE p.\{property} = '\{value}'" ""; // daeth
  • Mae seithfed rhagolwg o'r Vector API wedi'i ychwanegu, gan ddarparu swyddogaethau ar gyfer cyfrifiadau fector sy'n cael eu perfformio gan ddefnyddio cyfarwyddiadau fector ar broseswyr x86_64 ac AArch64 a chaniatáu i weithrediadau gael eu cymhwyso ar yr un pryd i werthoedd lluosog (SIMD). Yn wahanol i'r galluoedd a ddarperir yn y casglwr HotSpot JIT ar gyfer auto-fectoreiddio gweithrediadau sgalar, mae'r API newydd yn ei gwneud hi'n bosibl rheoli fectoreiddio yn benodol ar gyfer prosesu data cyfochrog.
  • Mae gweithrediad rhagarweiniol o'r API Stream estynedig wedi'i ychwanegu sy'n cefnogi diffinio eich gweithrediadau canolraddol eich hun, a allai fod yn ddefnyddiol mewn achosion lle nad yw gweithrediadau canolradd adeiledig presennol yn ddigonol ar gyfer y trawsnewid data a ddymunir. Mae trinwyr brodorol yn cael eu cysylltu gan ddefnyddio'r gweithrediad canolraddol newydd Stream::gather(Gatherer), sy'n prosesu elfennau ffrwd trwy gymhwyso triniwr defnyddiwr-benodol iddynt. 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]]
  • Mae ail fersiwn o'r API arbrofol ar gyfer Concurrency Strwythuredig wedi'i gynnig i'w brofi, sy'n symleiddio datblygiad cymwysiadau aml-edau trwy brosesu tasgau lluosog a gyflawnir mewn gwahanol edafedd fel un bloc.
  • Ychwanegwyd ail weithrediad rhagarweiniol o ddosbarthiadau sydd wedi'u datgan yn ymhlyg ac achosion dienw o'r "prif" ddull, a all hepgor datganiadau cyhoeddus / sefydlog, pasio amrywiaeth o ddadleuon, ac endidau eraill sy'n gysylltiedig â datganiad dosbarth. // oedd dosbarth cyhoeddus HelloWorld { prif gyflenwad gwag statig cyhoeddus (Llinynnol[] args) { System.out.println("Helo fyd!"); } } // nawr gallwch wagio prif() { System.out.println("Helo, Byd!"); }
  • Ychwanegwyd ail ragolwg o weithredu Gwerthoedd Cwmpasedig, gan ganiatáu i ddata na ellir ei gyfnewid gael ei rannu ar draws edafedd a chyfnewid data yn effeithlon rhwng edafedd plentyn (mae gwerthoedd yn cael eu hetifeddu). Mae Gwerthoedd Cwmpasedig yn cael eu datblygu i ddisodli'r mecanwaith newidynnau edau-lleol ac maent yn fwy effeithlon wrth ddefnyddio niferoedd mawr iawn o edafedd rhithwir (miloedd neu filiynau o edafedd). Y prif wahaniaeth rhwng Gwerthoedd Cwmpasedig a newidynnau edau-lleol yw bod y cyntaf yn cael ei ysgrifennu unwaith, na ellir ei newid yn y dyfodol, a'i fod yn parhau i fod ar gael dim ond am gyfnod gweithredu'r edefyn.
  • Mae'r casglwr sbwriel Parallel wedi gwella perfformiad wrth weithio gydag araeau mawr o wrthrychau. Roedd optimeiddio yn ei gwneud hi'n bosibl mewn rhai profion gydag araeau mawr o wrthrychau i leihau'r oedi cyn dechrau chwilio am wrthrych 20%.

Yn ogystal, gallwch nodi cyhoeddi diweddariad i'r platfform ar gyfer creu cymwysiadau gyda rhyngwyneb graffigol JavaFX 22.

Ffynhonnell: opennet.ru

Ychwanegu sylw