Java SE 22 platvormi ja OpenJDK 22 avatud viiterakenduse vÀljalase

PĂ€rast kuuekuulist arendust on Oracle vĂ€lja andnud Java SE 22 platvormi (Java Platform, Standard Edition 22), mis kasutab oma referentsiimplikatsioonina avatud lĂ€htekoodiga OpenJDK projekti. VĂ€lja arvatud mĂ”nede aegunud funktsioonide eemaldamine, sĂ€ilitab Java SE 22 tagasiĂŒhilduvuse Java platvormi varasemate versioonidega – enamik varem kirjutatud Java projekte töötab uue versiooni all muutmata kujul. Java SE 22 (JDK, JRE ja Server JRE) installimiseks valmis versioonid on ette valmistatud... Linux (x86_64, AArch64), Windows (x86_64) ja macOS (x86_64, AArch64). OpenJDK projekti poolt vĂ€lja töötatud Java 22 referentsimitatsioon on tĂ€ielikult avatud lĂ€htekoodiga GPLv2 litsentsi alusel koos GNU ClassPath erandiga, mis vĂ”imaldab dĂŒnaamilist linkimist kommertstoodetega.

Java SE 22 on klassifitseeritud tavaliseks tugivÀljalaseks ja seda jÀtkatakse vÀrskenduste saamisega kuni jÀrgmise vÀljalaskeni. Pikaajalise toe (LTS) haru peaks olema Java SE 21 vÔi Java SE 17, mis saavad vÀrskendusi vastavalt 2031. ja 2029. aastani (tavaliselt saadaval kuni 2028. ja 2026. aastani). Avalik tugi Java SE 11 LTS-i harule lÔppes mullu septembris, kuid pikendatud tugi jÀtkub kuni 2032. aastani. Java SE 8 LTS-i haru pikendatud tugi jÀtkub kuni 2030. aastani.

Tuletame meelde, et alates Java 10 vĂ€ljalaskmisest lĂ€ks projekt ĂŒle uuele arendusprotsessile, mis tĂ€hendab lĂŒhemat tsĂŒklit uute vĂ€ljaannete moodustamiseks. Uus funktsionaalsus on nĂŒĂŒd vĂ€lja töötatud ĂŒhes pidevalt uuenevas pĂ”hiharus, mis sisaldab valmis muudatusi ja millest hargnetakse iga kuue kuu tagant uute vĂ€ljaannete stabiliseerimiseks.

Java 22 uute funktsioonide hulka kuuluvad:

  • G1 prĂŒgikoguja sisaldab piirkonna kinnitamise tuge, mis vĂ”imaldab ajutiselt fikseerida Java-objektide asukoha mĂ€lus, et vĂ€ltida nende teisaldamist prĂŒgikoguja poolt ja vĂ”imaldada viiteid nendele objektidele ohutult Java ja algkoodi vahel edastada. Kinnitamine vĂ”imaldab teil vĂ€hendada latentsust ja vĂ€ltida prĂŒgikogumise keelamist JNI (Java Native Interface) kriitiliste piirkondade kĂ€ivitamisel omakoodiga (nende jaotiste tĂ€itmise ajal ei tohiks JVM vĂ”istlustingimuste vĂ€ltimiseks liigutada nendega seotud kriitilisi objekte). Kinnitamine eemaldab kriitilised objektid prĂŒgikoguja vaatevĂ€ljast, mis vĂ”ib jĂ€tkata kinnitamata alade puhastamist.
  • Lisatud on esialgne funktsioon, mis lubab konstruktorites mÀÀrata avaldisi enne super(...) kutsumist, mida kasutatakse pĂ€ritud klassikonstruktori algklassi konstruktori selgesĂ”naliseks kutsumiseks, kui need avaldised ei viita konstruktori loodud eksemplarile. class VĂ€limine { void tere() { System.out.println("Tere"); } class Sisemine { Sisemine() { tere(); Super(); } } }
  • FFM (Foreign Function & Memory) API on stabiliseeritud, vĂ”imaldades Java programmide interaktsiooni vĂ€lise koodi ja andmetega, kutsudes funktsioone vĂ€listest teegidest ja pÀÀsedes juurde mĂ€lule vĂ€ljaspool JVM-i, ilma JNI-d (Java Native Interface) kasutamata.
  • Lubatud on nimetute muutujate ja mustrite sobitamise tugi – helistamisel kasutamata, kuid vajalike muutujate ja mustrite asemel saate nĂŒĂŒd mÀÀrata mĂ€rgi “_”. // was String pageName = switch (page) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> “ISSUE #” + issueNumber; ... }; // nĂŒĂŒd saate String leheNimi = switch (page) { case GitHubIssuePage(_, _, _, int issueNumber) -> “ISSUE #” + issueNumber; };
  • Java-klassi failide sĂ”elumiseks, genereerimiseks ja teisendamiseks pakutakse vĂ€lja klassifaili API esialgne juurutamine. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); bait[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue().). startsWith("debug"))) { classBuilder.with(ce } } });
  • Java-utiliit vĂ”imaldab kĂ€ivitada Java-programme, mis on saadaval mitme koodifaili vĂ”i eelkompileeritud klassiteegi kujul, ilma neid faile eraldi kompileerimata ja ilma ehitussĂŒsteemi konfigureerimata. Uus funktsioon muudab lihtsamaks programmide kĂ€ivitamise, milles eri klasside kood on eraldatud eraldi failideks. Prog.java: class Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Abimees { static void run() { System.out.println("Tere!"); } }

    NĂ€iteks kahest failist "Prog.java" ja "Helper.java" koosneva programmi kĂ€ivitamiseks piisab nĂŒĂŒd "java Prog.java" kĂ€ivitamisest, mis kompileerib klassi Prog, mÀÀratleb viite klassile Helper, leidke ja kompileerige fail java ja helistage pĂ”himeetodile.

  • Lisatud on stringimallide teine ​​eelrakendus, mis on rakendatud lisaks stringiliteraalidele ja tekstiplokkidele. Stringimallid vĂ”imaldavad kombineerida teksti arvutatud avaldiste ja muutujatega ilma + operaatorit kasutamata. Avaldiste asendamine toimub asenduste \{..} abil ning asendatud vÀÀrtuste Ă”igsuse kontrollimiseks saab ĂŒhendada spetsiaalsed töötlejad. NĂ€iteks kontrollib SQL-mootor SQL-koodi asendatavaid vÀÀrtusi ja tagastab vĂ€ljundina objekti java.sql.Statement, samas kui JSON-protsessor jĂ€lgib JSON-i asenduste Ă”igsust ja tagastab JsonNode'i. String query = "SELECT * FROM Isik p WHERE p." + atribuut + " = '" + vÀÀrtus + "'"; // oli lausepĂ€ring = SQL."""SELECT * FROM Isik p WHERE p.\{omadus} = '\{vÀÀrtus}'"""; // sai
  • Lisatud on Vector API seitsmes eelvaade, mis pakub funktsioone vektorarvutuste jaoks, mida teostatakse vektorijuhiste abil x86_64 ja AArch64 protsessoritel ning vĂ”imaldab toiminguid ĂŒheaegselt rakendada mitmele vÀÀrtusele (SIMD). Erinevalt HotSpot JIT kompilaatoris pakutavatest vĂ”imalustest skalaaroperatsioonide automaatseks vektoriseerimiseks vĂ”imaldab uus API paralleelse andmetöötluse vektoriseerimist selgesĂ”naliselt juhtida.
  • Lisatud on laiendatud Stream API esialgne juurutus, mis toetab teie enda vaheoperatsioonide mÀÀratlemist, mis vĂ”ib olla kasulik juhtudel, kui olemasolevatest sisseehitatud vahetoimingutest ei piisa soovitud andmete teisendamiseks. OmakĂ€itlejad ĂŒhendatakse uue vaheoperatsiooni Stream::gather(Gatherer) abil, mis töötleb vooelemente, rakendades neile kasutaja mÀÀratud töötleja. 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]]
  • Testimiseks on pakutud struktureeritud samaaegsuse eksperimentaalse API teist versiooni, mis lihtsustab mitme lĂ”imega rakenduste arendamist, töödeldes mitut erinevates lĂ”imedes tĂ€idetavaid toiminguid ĂŒhe plokina.
  • Lisati kaudselt deklareeritud klasside ja "peamise" meetodi nimetute eksemplaride teine ​​eelrakendus, mis vĂ”ib loobuda avalikest/staatilistest deklaratsioonidest, argumentide massiivi edastamisest ja muudest klassideklaratsiooniga seotud olemitest. // oli public class HelloWorld { public static void main(String[] args) { System.out.println("Tere maailm!"); } } // nĂŒĂŒd saate void main() { System.out.println("Tere, maailm!"); }
  • Lisati ulatusega vÀÀrtuste teine ​​eelvaaterakendus, mis vĂ”imaldab muutumatuid andmeid jagada lĂ”imede vahel ja andmeid tĂ”husalt alamlĂ”imede vahel vahetada (vÀÀrtused on pĂ€ritud). Piiratud vÀÀrtused töötatakse vĂ€lja, et asendada lĂ”ime kohalike muutujate mehhanismi ja need on tĂ”husamad, kui kasutatakse vĂ€ga palju virtuaalseid lĂ”ime (tuhandeid vĂ”i miljoneid lĂ”ime). Peamine erinevus ulatuse vÀÀrtuste ja lĂ”ime kohalike muutujate vahel on see, et esimesed kirjutatakse ĂŒks kord, neid ei saa tulevikus muuta ja need jÀÀvad kĂ€ttesaadavaks ainult lĂ”ime tĂ€itmise ajaks.
  • ParalleelprĂŒgikoguja on parandanud jĂ”udlust suurte objektide massiividega töötamisel. Optimeerimine vĂ”imaldas mĂ”nes suurte objektide massiividega testides vĂ€hendada viivitust enne objekti otsimise alustamist 20%.

Lisaks vÔite mÀrkida graafilise liidesega JavaFX 22 rakenduste loomise platvormi vÀrskenduse avaldamist.

Allikas: opennet.ru

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster