Нашри платформаи Java SE 22 ва татбиқи истинодҳои кушоди OpenJDK 22

Пас аз шаш моҳи таҳия, Oracle платформаи Java SE 22 (Java Platform, Standard Edition 22) -ро баровард, ки лоиҳаи кушодаи OpenJDK-ро ҳамчун татбиқи истинод истифода мебарад. Ба истиснои бартараф кардани баъзе хусусиятҳои кӯҳнашуда, Java SE 22 мутобиқати қафоро бо версияҳои қаблии платформаи Java нигоҳ медорад - аксари лоиҳаҳои қаблан навишташудаи Java ҳангоми иҷро кардани версияи нав бидуни тағирот кор хоҳанд кард. Сохтаҳои насбшавандаи Java SE 22 (JDK, JRE ва Server JRE) барои Linux (x86_64, AArch64), Windows (x86_64) ва macOS (x86_64, AArch64) омода карда шудаанд. Татбиқи истинодҳои Java 22, ки аз ҷониби лоиҳаи OpenJDK таҳия шудааст, манбаи пурра дар доираи иҷозатномаи GPLv2 бо истисноҳои GNU ClassPath барои имкон додани пайвасти динамикӣ ба маҳсулоти тиҷоратӣ мебошад.

Java SE 22 ҳамчун як нашри дастгирии муқаррарӣ тасниф карда мешавад ва то нашри навбатӣ гирифтани навсозиро идома медиҳад. Филиали Дастгирии дарозмуддат (LTS) бояд Java SE 21 ё Java SE 17 бошад, ки мутаносибан то соли 2031 ва 2029 навсозиҳо мегиранд (умуман то солҳои 2028 ва 2026 дастрас аст). Дастгирии ҷамъиятӣ барои филиали LTS Java SE 11 моҳи сентябри соли гузашта ба охир расид, аммо дастгирии васеъ то соли 2032 идома хоҳад ёфт. Дастгирии васеъ барои филиали LTS Java SE 8 то соли 2030 идома хоҳад ёфт.

Ёдовар мешавем, ки аз барориши Java 10 оғоз шуда, лоиҳа ба раванди нави рушд гузашт, ки давраи кӯтоҳтари ташаккули релизҳои навро дар назар дорад. Функсияҳои нав ҳоло дар як шохаи устоди доимо таҷдидшаванда таҳия шудааст, ки тағйироти тайёрро дар бар мегирад ва аз он филиалҳо ҳар шаш моҳ барои устувор кардани релизҳои нав шохаҳо ҷудо карда мешаванд.

Хусусиятҳои нав дар Java 22 иборатанд аз:

  • Ҷамъоварии партовҳои G1 дастгирии pinning минтақаро дар бар мегирад, ки ба шумо имкон медиҳад, ки ҷойгиршавии объектҳои Java-ро дар хотира муваққатан ислоҳ кунед, то онҳо аз ҷониби коллектори ахлот кӯчонида нашаванд ва ба ин объектҳо имкон диҳанд, ки истинодҳо ба ин объектҳо дар байни Java ва коди аслӣ гузаранд. Пайвастшавӣ ба шумо имкон медиҳад, ки таъхирро коҳиш диҳед ва ҷамъоварии партовҳоро ҳангоми иҷрои минтақаҳои муҳими JNI (Java Native Interface) бо коди аслӣ пешгирӣ кунед (ҳангоми иҷрои ин бахшҳо, JVM набояд объектҳои муҳими бо онҳо алоқамандро барои пешгирӣ кардани шароити мусобиқа ҳаракат кунад). Пайвастшавӣ объектҳои муҳимро аз назари коллектори ахлот хориҷ мекунад, ки метавонад тоза кардани минтақаҳои ҷудонашударо идома диҳад.
  • Хусусияти муқаддамотӣ илова карда шудааст, то ки ифодаҳо дар конструкторҳо пеш аз занг задани super(...) муайян карда шаванд, ки барои ба таври возеҳ даъват кардани созандаи синфи волидайн аз созандаи синфи меросӣ истифода мешавад, агар ин ифодаҳо ба мисоли аз ҷониби созанда сохташуда ишора накунанд. class Outer { void hello() { System.out.println("Салом"); } class Inner { Inner() { салом(); супер(); } } }
  • API FFM (Foreign Function & Memory) ба эътидол оварда шудааст, ки имкон медиҳад ҳамкории барномаҳои Java бо код ва додаҳои беруна тавассути занги функсияҳо аз китобхонаҳои беруна ва дастрасӣ ба хотираи берун аз JVM, бидуни муроҷиат ба истифодаи JNI (Java Native Interface).
  • Дастгирии тағирёбандаҳои номаълум ва мувофиқати намуна фаъол карда шудааст - ба ҷои тағирёбандаҳо ва намунаҳои истифоданашуда, вале зарурӣ ҳангоми зангзанӣ, шумо акнун метавонед аломати “_”-ро муайян кунед. // was String pageName = switch (саҳифа) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> "ISSUE #" + issueNumber; ... }; // акнун шумо метавонед String pageName = switch (саҳифа) { case GitHubIssuePage(_, _, _, int issueNumber) -> "ISSUE #" + issueNumber; };
  • Татбиқи пешакии API Class-File барои таҳлил, тавлид ва табдил додани файлҳои синфи Java пешниҳод карда мешавад. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(байт); байт [] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { агар (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). startsWith("debug"))) { classBuilder.with(ce);
  • Утилити java имкон медиҳад, ки барномаҳои Java-ро, ки дар шакли якчанд файлҳои кодӣ ё китобхонаҳои синфҳои пешакӣ тартибдодашуда таъмин карда шудаанд, бидуни тартиб додани ин файлҳо ва танзими системаи сохташуда таъмин карда шаванд. Хусусияти нав иҷрои барномаҳоеро осон мекунад, ки дар онҳо коди синфҳои гуногун ба файлҳои алоҳида ҷудо карда шудааст. Prog.java: class Prog { public static void void main(String[] args) { Helper.run(); } } Helper.java: class Helper { Static void run() { System.out.println("Салом!"); } }

    Масалан, барои иҷро кардани барномае, ки аз ду файли "Prog.java" ва "Helper.java" иборат аст, ҳоло иҷро кардани "java Prog.java" кифоя аст, ки синфи Prog-ро тартиб медиҳад, истинодро ба синфи Helper муайян мекунад, файли Helper-ро пайдо ва тартиб диҳед ва усули асосӣро даъват кунед.

  • Иҷрои дуюми пешакии Шаблонҳои сатр илова карда шуд, ки ба ғайр аз литералҳои сатр ва блокҳои матнӣ амалӣ карда мешавад. Шаблонҳои сатр ба шумо имкон медиҳанд, ки матнро бо ифодаҳо ва тағирёбандаҳои ҳисобшуда бидуни истифодаи оператори + якҷоя кунед. Ивазкунии ибораҳо бо истифода аз ивазкунии \{..} амалӣ карда мешавад ва барои тафтиши дурустии қимматҳои ивазшуда коркардкунандагони махсусро пайваст кардан мумкин аст. Масалан, муҳаррики SQL арзишҳои ба коди SQL ивазшударо тафтиш мекунад ва объекти java.sql.Statement-ро ҳамчун баромад бармегардонад, дар ҳоле ки протсессори JSON дурустии ивазкунии JSON-ро назорат мекунад ва JsonNode-ро бармегардонад. Дархости сатр = "Интихоб * АЗ Шахси p КУҶО p." + хосият + " = '" + арзиш + "'"; // was Изҳороти дархост = SQL.""" ИНТИХОБ * АЗ Шахси p WHERE p.\{холик} = '\{арзиш}'"""; // шуд
  • Пешнамоиши ҳафтуми API Vector API илова карда шуд, ки функсияҳоро барои ҳисобҳои векторӣ таъмин мекунад, ки бо истифода аз дастурҳои векторӣ дар протсессори x86_64 ва AArch64 иҷро карда мешаванд ва имкон медиҳанд, ки амалиётҳо дар як вақт ба арзишҳои сершумор (SIMD) татбиқ карда шаванд. Баръакси қобилиятҳое, ки дар компилятори 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("Салом, Ҷаҳон!"); }
  • Татбиқи пешнамоиши дуюми арзишҳои миқдор илова карда шуд, ки имкон медиҳад додаҳои тағирнашаванда дар байни риштаҳо мубодила карда шаванд ва додаҳо байни риштаҳои кӯдакона (арзишҳо мерос гирифта мешаванд). Арзишҳои фарогир барои иваз кардани механизми тағирёбандаҳои риштаи маҳаллӣ таҳия карда мешаванд ва ҳангоми истифодаи миқдори хеле зиёди риштаҳои виртуалӣ (ҳазорҳо ё миллионҳо риштаҳо) самараноктаранд. Тафовути асосии байни арзишҳои миқёсӣ ва тағирёбандаҳои риштаи маҳаллӣ дар он аст, ки аввалӣ як маротиба навишта мешаванд, дар оянда тағир дода намешаванд ва танҳо дар давоми иҷрои ришта дастрас мемонанд.
  • Ҷамъоварии партовҳои параллелӣ ҳангоми кор бо массивҳои зиёди объектҳо беҳтар шудааст. Оптимизатсия имкон дод, ки дар баъзе санҷишҳо бо массиви зиёди объектҳо таъхирро пеш аз оғози ҷустуҷӯи объект 20% кам кунад.

Илова бар ин, шумо метавонед нашри навсозии платформаро барои эҷоди барномаҳо бо интерфейси графикии JavaFX 22 қайд кунед.

Манбаъ: opennet.ru

Илова Эзоҳ