Liberasyon platfòm Java SE 22 ak aplikasyon referans louvri OpenJDK 22

Apre sis mwa nan devlopman, Oracle te pibliye Java SE 22 (Java Platform, Standard Edition 22), ki sèvi ak pwojè OpenJDK sous louvri kòm yon aplikasyon referans. Ak eksepsyon de retire kèk karakteristik demode, Java SE 22 kenbe konpatibilite bak ak degaje anvan yo nan platfòm Java a - pifò pwojè Java yo te ekri yo pral travay san chanjman lè yo kouri anba nouvo vèsyon an. Pare-pou-enstale bati nan Java SE 22 (JDK, JRE ak sèvè JRE) yo prepare pou Linux (x86_64, AArch64), Windows (x86_64) ak macOS (x86_64, AArch64). Pwojè OpenJDK devlope, aplikasyon referans Java 22 la se yon sous totalman louvri anba lisans GPLv2, ak eksepsyon GNU ClassPath ki pèmèt lyen dinamik ak pwodwi komèsyal yo.

Java SE 22 klase kòm yon lage sipò regilye epi li pral kontinye resevwa mizajou jiska pwochen lage a. Branch Sipò Alontèm (LTS) ta dwe Java SE 21 oswa Java SE 17, ki pral resevwa mizajou jiska 2031 ak 2029, respektivman (jeneralman disponib jiska 2028 ak 2026). Sipò piblik pou branch LTS Java SE 11 la te fini nan mwa septanm pase a, men sipò pwolonje ap kontinye jiska 2032. Sipò pwolonje pou branch LTS Java SE 8 la ap kontinye jiska 2030.

Se pou nou raple w ke kòmanse ak lage nan Java 10, pwojè a chanje nan yon nouvo pwosesis devlopman, ki vle di yon sik ki pi kout pou fòmasyon nan nouvo degaje. Nouvo fonksyonalite kounye a devlope nan yon sèl branch mèt toujou ap mete ajou, ki gen ladann chanjman ki pare yo epi ki soti nan ki branch yo branch chak sis mwa estabilize nouvo degaje.

Nouvo karakteristik nan Java 22 yo enkli:

  • Pèseptè fatra G1 a gen ladan sipò pou pinning rejyon an, ki pèmèt ou fikse tanporèman kote objè Java yo nan memwa pou evite pèseptè fatra a deplase yo epi pou pèmèt referans a objè sa yo pase san danje ant Java ak kòd natif natal. Pinning pèmèt ou diminye latansi epi evite enfim koleksyon fatra lè w ap egzekite rejyon kritik JNI (Java Native Interface) ak kòd natif natal (pandan w ap egzekite seksyon sa yo, JVM a pa ta dwe deplase objè kritik ki asosye ak yo pou evite kondisyon ras yo). Epingle retire objè enpòtan nan gade nan pèseptè fatra a, ki ka kontinye netwaye zòn ki pa zepeng.
  • Yo te ajoute yon karakteristik preliminè pou pèmèt ekspresyon yo espesifye nan konstrukteur anvan yo rele super(...), yo itilize pou rele klèman yon konstruktè klas paran ki soti nan yon konstrukteur klas eritye si ekspresyon sa yo pa fè referans a yon egzanp ki kreye pa konstrukteur a. klas Eksteryè { void hello () { System.out.println ("Alo"); } klas Inner { Inner () { alo (); super(); } } }
  • API FFM (Fonksyon Etranjè ak memwa) te estabilize, sa ki pèmèt entèraksyon nan pwogram Java ak kòd ekstèn ak done lè yo rele fonksyon ki soti nan bibliyotèk ekstèn ak aksè memwa deyò JVM a, san yo pa itilize JNI (Java Native Interface).
  • Sipò pou varyab san non ak matche modèl yo te pèmèt - olye pou yo pa itilize men varyab ak modèl ki nesesè lè w ap rele, kounye a ou ka presize karaktè "_" la. // te String pageName = switch (paj) { case GitHubIssuePage (var url, var kontni, var lyen, int issueNumber) -> "ISSUE #" + issueNumber; ...}; // kounye a ou ka String pageName = switch (paj) { case GitHubIssuePage (_, _, _, int issueNumber) -> "ISSUE #" + issueNumber; };
  • Yo pwopoze yon aplikasyon preliminè API Class-File pou analize, jenere, ak konvèti fichye klas Java yo. ClassFile cf = ClassFile.of (); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { pou (ClassElement ce : classModel) { if (!(se egzanp MethodModel mm && mm.methodName().stringValue(). startsWith("debug"))) { classBuilder.with(ce);
  • Itilite java a bay kapasite pou kouri pwogram Java, yo bay sou fòm plizyè fichye kòd oswa bibliyotèk klas prekonpile, san yo pa konpile dosye sa yo separeman epi san konfigirasyon sistèm konstriksyon an. Nouvo karakteristik la fè li pi fasil pou kouri pwogram kote kòd diferan klas yo separe an fichye separe. Prog.java: klas Prog { piblik static void main(String[] args) { Helper.run (); } } Helper.java: klas Helper { static void run () { System.out.println ("Alo!"); } }

    Pou egzanp, pou kouri yon pwogram ki gen de fichye "Prog.java" ak "Helper.java" li se kounye a ase yo kouri "java Prog.java", ki pral konpile klas la Prog, defini yon referans nan klas la Helper, jwenn ak konpile dosye a Helper java epi rele metòd prensipal la.

  • Te ajoute yon dezyèm aplikasyon preliminè nan modèl String, aplike anplis literal fisèl ak blòk tèks. Modèl chèn pèmèt ou konbine tèks ak ekspresyon kalkile ak varyab san yo pa itilize operatè a +. Ranplasman ekspresyon yo fèt lè l sèvi avèk sibstitisyon \{..}, epi yo ka konekte moun kap okipe yo espesyal pou tcheke valè ki ranplase yo kòrèk. Pou egzanp, motè SQL tcheke valè yo te ranplase nan kòd SQL la epi li retounen yon objè java.sql.Statement kòm pwodiksyon, pandan y ap processeur JSON kontwole kòrèkteman sibstitisyon JSON yo epi retounen yon JsonNode. String requête = "CHWAZI * FROM Moun p WHERE p." + pwopriyete + " = '" + valè + "'"; // was Statement query = SQL."""SELECT * FROM Person p WHERE p.\{propriété} = '\{valè}'"""; // te vin
  • Yo te ajoute yon setyèm aperçu nan API vektè a, ki bay fonksyon pou kalkil vektè ki fèt lè l sèvi avèk enstriksyon vektè sou processeurs x86_64 ak AArch64 epi pèmèt operasyon yo aplike ansanm nan plizyè valè (SIMD). Kontrèman ak kapasite yo bay nan HotSpot JIT du pou oto-vectorization nan operasyon eskalè, nouvo API a fè li posib pou kontwole klèman vektorizasyon pou pwosesis done paralèl.
  • Yo te ajoute yon aplikasyon preliminè Stream API pwolonje ki sipòte defini pwòp operasyon entèmedyè ou yo, ki ka itil nan ka kote operasyon entèmedyè entegre ki egziste deja yo pa ase pou transfòmasyon done yo vle. Manadjè natif natal yo konekte lè l sèvi avèk nouvo operasyon entèmedyè Stream::gather(Gatherer), ki trete eleman kouran lè li aplike yon moun kap okipe yo. 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]]
  • Yon dezyèm vèsyon eksperimantal API pou Konkou estriktire yo te pwopoze pou tès, ki senplifye devlopman aplikasyon milti-threaded pa trete plizyè travay egzekite nan diferan fil kòm yon blòk sèl.
  • Te ajoute yon dezyèm aplikasyon preliminè nan klas yo deklare implicitman ak egzanp san non nan metòd "prensipal la", ki ka dispanse ak deklarasyon piblik/estatik, pase yon seri agiman, ak lòt antite ki asosye ak yon deklarasyon klas. // te klas piblik HelloWorld { public static void main(String[] args) { System.out.println("Alo mond!"); } } // kounye a ou ka anile main() { System.out.println ("Bonjou, Mondyal!"); }
  • Te ajoute yon dezyèm aplikasyon aperçu Valè Scoped, ki pèmèt done imuiabl yo dwe pataje atravè fil ak done echanje avèk efikasite ant fil timoun (valè yo eritye). Valè Scoped yo ap devlope pou ranplase mekanis varyab lokal yo epi yo pi efikas lè w ap itilize yon gwo kantite fil vityèl (dè milye oswa dè milyon de fil). Diferans prensipal ant Valè Scoped ak varyab lokal fil yo se ke ansyen yo ekri yon fwa, yo pa ka chanje nan lavni, epi yo rete disponib sèlman pou dire ekzekisyon fil la.
  • Pèseptè fatra Paralèl la amelyore pèfòmans lè w ap travay ak gwo ranje objè. Optimizasyon te fè li posib nan kèk tès ak gwo ranje objè diminye reta a anvan yo kòmanse rechèch pou yon objè pa 20%.

Anplis de sa, ou ka sonje piblikasyon yon aktyalizasyon platfòm la pou kreye aplikasyon ak yon koòdone grafik JavaFX 22.

Sous: opennet.ru

Add nouvo kòmantè