Java SE 22 платформасының шығарылымы және OpenJDK 22 ашық анықтамалық іске асыру

Алты айлық әзірлеуден кейін Oracle анықтамалық іске асыру ретінде OpenJDK ашық бастапқы жобасын пайдаланатын Java SE 22 (Java Platform, Standard Edition 22) платформасын шығарды. Кейбір ескірген мүмкіндіктердің жойылуын қоспағанда, Java SE 22 Java платформасының алдыңғы шығарылымдарымен кері үйлесімділікті сақтайды — бұрын жазылған Java жобаларының көпшілігі жаңа нұсқада іске қосылған кезде өзгеріссіз жұмыс істейді. Java SE 22 (JDK, JRE және Server JRE) орнатуға дайын жинақтары Linux (x86_64, AArch64), Windows (x86_64) және macOS (x86_64, AArch64) үшін дайындалған. OpenJDK жобасы әзірлеген Java 22 анықтамалық іске асыру коммерциялық өнімдермен динамикалық байланыстыруға мүмкіндік беру үшін GNU ClassPath ерекшеліктері бар GPLv2 лицензиясы бойынша толық ашық көзі болып табылады.

Java SE 22 тұрақты қолдау шығарылымы ретінде жіктеледі және келесі шығарылымға дейін жаңартуларды алуды жалғастырады. Ұзақ мерзімді қолдау (LTS) тармағы сәйкесінше 21 және 17 жылға дейін жаңартуларды алатын Java SE 2031 немесе Java SE 2029 болуы керек (әдетте 2028 және 2026 жылға дейін қол жетімді). Java SE 11 LTS филиалына қоғамдық қолдау өткен жылдың қыркүйек айында аяқталды, бірақ кеңейтілген қолдау 2032 жылға дейін жалғасады. Java SE 8 LTS филиалына кеңейтілген қолдау 2030 жылға дейін жалғасады.

Естеріңізге сала кетейік, Java 10 шығарылымынан бастап жоба жаңа шығарылымдарды қалыптастырудың қысқа циклін білдіретін жаңа әзірлеу процесіне көшті. Жаңа функционалдылық енді бір үнемі жаңартылып отыратын негізгі бөлімде әзірленді, ол дайын өзгерістерді қамтиды және жаңа шығарылымдарды тұрақтандыру үшін филиалдар жарты жылда бір рет тармақталады.

Java 22-дағы жаңа мүмкіндіктер мыналарды қамтиды:

  • G1 қоқыс жинағышы аймақты бекітуге қолдауды қамтиды, ол қоқыс жинағыш арқылы жылжытпау үшін жадтағы Java нысандарының орнын уақытша түзетуге және осы нысандарға сілтемелерді Java мен жергілікті код арасында қауіпсіз жіберуге мүмкіндік береді. Бекіту кідірістерді азайтуға және JNI (Java Native Interface) маңызды аймақтарын жергілікті кодпен орындау кезінде қоқыс жинауды өшірмеуге мүмкіндік береді (осы бөлімдерді орындау кезінде JVM жарыс жағдайларын болдырмау үшін олармен байланысты маңызды нысандарды жылжытпауы керек). Бекіту маңызды нысандарды қоқыс жинағыштың көрінісінен жояды, ол бекітілмеген аумақтарды тазалауды жалғастыра алады.
  • Super(...) шақыру алдында өрнектерді конструкторларда көрсетуге мүмкіндік беретін алдын ала мүмкіндік қосылды, егер бұл өрнектер конструктор жасаған данаға сілтеме жасамаса, мұраланған сынып конструкторынан ата-аналық класс конструкторын анық шақыру үшін пайдаланылады. class Outer { void hello() { System.out.println("Сәлем"); } class Inner { Inner() { hello(); тамаша(); } } }
  • FFM (Foreign Function & Memory) API тұрақтандырылды, ол JNI (Java Native Interface) қолданбай, сыртқы кітапханалардан функцияларды шақыру және JVM сыртындағы жадқа қол жеткізу арқылы Java бағдарламаларының сыртқы кодпен және деректермен өзара әрекеттесуіне мүмкіндік береді.
  • Аты жоқ айнымалыларды және үлгіні сәйкестендіруді қолдау қосылды - қоңырау шалу кезінде пайдаланылмаған, бірақ қажетті айнымалылар мен үлгілердің орнына енді «_» таңбасын көрсетуге болады. // was String pageName = switch (page) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> “ISSUE #” + issueNumber; ... }; // енді сіз String pageName = switch (page) { case GitHubIssuePage(_, _, _, int issueNumber) -> “ISSUE #” + issueNumber; };
  • Java класс файлдарын талдау, жасау және түрлендіру үшін Class-File API алдын ала іске асыру ұсынылады. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(байт); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instance of MethodModel mm && mm.methodName().stringValue(). startsWith("debug"))) { classBuilder.with(ce); } } });
  • Java утилитасы бірнеше кодтық файлдар немесе алдын ала құрастырылған класс кітапханалары түрінде берілген Java бағдарламаларын осы файлдарды бөлек құрастырмай және құрастыру жүйесін конфигурацияламай іске қосу мүмкіндігін береді. Жаңа мүмкіндік әртүрлі сыныптардың коды бөлек файлдарға бөлінген бағдарламаларды іске қосуды жеңілдетеді. Prog.java: class Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Сәлем!"); } }

    Мысалы, «Prog.java» және «Helper.java» екі файлынан тұратын бағдарламаны іске қосу үшін қазір Prog сыныбын құрастыратын, Helper класына сілтемені анықтайтын «java Prog.java» іске қосу жеткілікті. Көмекші файлын тауып, құрастырыңыз.java және негізгі әдісті шақыру.

  • Жол литералдары мен мәтін блоктарына қосымша енгізілген Жол үлгілерінің екінші алдын ала іске қосылуы қосылды. Жол үлгілері + операторын қолданбай-ақ мәтінді есептелген өрнектермен және айнымалылармен біріктіруге мүмкіндік береді. Өрнектерді ауыстыру \{..} алмастырулары арқылы жүзеге асырылады, ал ауыстырылған мәндердің дұрыстығын тексеру үшін арнайы өңдеушілерді қосуға болады. Мысалы, SQL механизмі SQL кодына ауыстырылатын мәндерді тексереді және шығыс ретінде java.sql.Statement нысанын қайтарады, ал JSON процессоры JSON ауыстыруларының дұрыстығын бақылайды және JsonNode қайтарады. Жолдық сұрау = "ТАҢДАУ * FROM Адам p WHERE p." + сипат + " = '" + мән + "'"; // болды Мәлімдеме сұрауы = SQL."""SELECT * FROM Person p WHERE p.\{property} = '\{value}'"""; // болды
  • X86_64 және AArch64 процессорларында векторлық нұсқауларды қолдану арқылы орындалатын және бірнеше мәндерге (SIMD) бір уақытта операцияларды қолдануға мүмкіндік беретін векторлық есептеулерге арналған функцияларды қамтамасыз ететін Vector API жетінші алдын ала қарауы қосылды. Скалярлық операцияларды автовекторлау үшін HotSpot JIT компиляторында берілген мүмкіндіктерден айырмашылығы, жаңа API деректерді параллель өңдеу үшін векторизацияны нақты басқаруға мүмкіндік береді.
  • Өзіңіздің аралық операцияларыңызды анықтауды қолдайтын кеңейтілген Stream API алдын ала іске асырылуы қосылды, ол бар кірістірілген аралық операциялар қажетті деректерді түрлендіру үшін жеткіліксіз болған жағдайда пайдалы болуы мүмкін. Жергілікті өңдегіштер пайдаланушы көрсеткен өңдегішті қолдану арқылы ағын элементтерін өңдейтін Stream::gather(Gatherer) жаңа аралық операциясы арқылы қосылады. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(жаңа WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Тестілеу үшін құрылымдық параллельдікке арналған тәжірибелік API екінші нұсқасы ұсынылды, ол бір блок ретінде әртүрлі ағындарда орындалған бірнеше тапсырмаларды өңдеу арқылы көп ағынды қолданбаларды әзірлеуді жеңілдетеді.
  • Жалпы/статикалық мәлімдемелерден, дәлелдер массивінен және сынып декларациясымен байланыстырылған басқа нысандардан бас тарта алатын жанама түрде жарияланған сыныптардың және атаусыз даналардың екінші алдын ала іске асырылуы қосылды. // жалпыға ортақ класс болды HelloWorld { public static void main(String[] args) { System.out.println("Сәлем әлем!"); } } // енді main() { System.out.println("Сәлем, Әлем!"); }
  • Ауыстырылған мәндердің екінші алдын ала қарау іске асырылуы қосылды, бұл өзгермейтін деректерді ағындар бойынша ортақ пайдалануға және деректерді еншілес ағындар арасында тиімді алмасуға мүмкіндік береді (мәндер мұраланған). Ауқымды мәндер ағындық жергілікті айнымалылар механизмін ауыстыру үшін әзірленуде және виртуалды ағындардың өте үлкен санын (мыңдаған немесе миллиондаған ағындар) пайдаланған кезде тиімдірек. Scoped Values ​​және ағындық жергілікті айнымалылар арасындағы негізгі айырмашылық біріншісі бір рет жазылады, болашақта өзгертілмейді және ағынның орындалу уақытында ғана қолжетімді болып қалады.
  • Параллельді қоқыс жинағыш нысандардың үлкен массивтерімен жұмыс істегенде өнімділікті жақсартты. Оңтайландыру нысандардың үлкен массивтері бар кейбір сынақтарда нысанды іздеуді бастамас бұрын кешіктіруді 20%-ға азайтуға мүмкіндік берді.

Сонымен қатар, JavaFX 22 графикалық интерфейсі бар қосымшаларды жасауға арналған платформаға жаңартудың жариялануын атап өтуге болады.

Ақпарат көзі: opennet.ru

пікір қалдыру