Java SE 23 ва OpenJDK 23 бароварда шуданд

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

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

Дар байни 23 навовариҳои дар Java SE пешниҳодшуда:

  • Реҷаи генеративии кори коллектори партовҳои ZGC (Generation Z Garbage Collector) ба таври нобаёнӣ бо истифода аз коркарди алоҳидаи объектҳои «кӯҳна» ва «ҷавон» фаъол карда мешавад, ки самаранокии тоза кардани объектҳои ба наздикӣ сохташударо бо мӯҳлати кӯтоҳ зиёд мекунад. Истифодаи Generational ZGC хатари дӯконҳоро ҳангоми тақсими захираҳо коҳиш медиҳад, сарбории CPU ва истеъмоли хотираро ҳангоми ҷамъоварии ахлот кам мекунад. Озмоиши Generational ZGC бо Apache Cassandra 4 афзоиши 4 маротиба зиёдшавии интиқолро бо андозаи собит ва чоряки камшавии андозаи теппаро бо интиқоли доимӣ нишон дод.
  • JavaDoc барои истифодаи Markdown барои ҳуҷҷатгузории код дар шарҳҳо дастгирӣ илова кардааст, ки онро ба ҷои омехтаи HTML ва JavaDoc @ тегҳо истифода бурдан мумкин аст.
    Java SE 23 ва OpenJDK 23 бароварда шуданд
  • Механизмҳои мувофиқати намунаҳо бо дастгирии пешакии истифодаи навъҳои ибтидоӣ (int, байт, char ва дигар намудҳои асосии ғайриобъектӣ) дар ҳама намуди қолабҳо, дар изҳороти "instanceof" ва блокҳои "гузариш" такмил дода шудаанд. гузариш (x.getStatus()) { ҳолати 0 -> "хуб"; ҳолати 1 -> "огоҳӣ"; ҳолати 2 -> "хато"; case int i -> "вазъи номаълум:" + i; } агар (ман мисоли байт б) { … b … }
  • Дастгирии пешакӣ барои истифодаи изҳороти ягонаи "модули M воридотӣ" барои ворид кардани ҳама бастаҳои содиркардаи як модули муайяншуда илова карда шуд. Тағйирот истифодаи дубораи китобхонаҳои модулиро ба таври назаррас содда мекунад ва ба шумо имкон медиҳад, ки китобхонаҳо ва синфҳоро бидуни муайян кардани ҷои онҳо дар иерархияи бастаҳо дохил кунед. Масалан, нишон додани "модули воридоти java.base" ҳамаи 54 бастаи ба модули java.base дохилшударо ворид мекунад, ки қаблан онҳоро алоҳида зикр кардан лозим буд (“import java.io.*”, “import java.util.* ”ва ғайра).

    Иҷрои дуюми пешакии API Class-File барои таҳлил, тавлид ва табдил додани файлҳои синфи Java пешниҳод карда мешавад. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(байт); байт [] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { барои (ClassElement ce : classModel) { агар (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). startsWith("debug"))) { classBuilder.with(ce);

  • Пешнамоиши ҳаштуми API Vector, функсияҳоро барои ҳисобҳои векторӣ таъмин мекунад, ки бо истифода аз дастурҳои векторӣ дар протсессори x86_64 ва AArch64 иҷро карда мешаванд ва имкон медиҳанд, ки амалиётҳо дар як вақт ба арзишҳои сершумор (SIMD) татбиқ карда шаванд. Баръакси қобилиятҳое, ки дар компилятори HotSpot JIT барои автовекторизатсияи амалиёти скалярӣ пешбинӣ шудаанд, API-и нав имкон медиҳад, ки векторизатсияро барои коркарди параллелӣ идора карда шавад.
  • Усулҳои формат, printf, readPassword ва readLine ба синфи java.io.Console барои формат кардан, намоиш додан ва хондани матн дар асоси маҳалли интихобшуда илова карда шуданд. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", Санаи нав()) 2024-май-16 jeudi
  • Татбиқи пешнамоиши дуюми 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]]
  • Иҷрои сеюми пешакии синфҳои ғайримустақим эълоншуда ва намунаҳои беномшудаи усули "асосӣ" илова карда шуд, ки метавонад аз эъломияҳои оммавӣ/статикӣ, интиқоли массиви аргументҳо ва дигар объектҳои марбут ба эъломияи синфӣ даст кашад. // синфи оммавӣ буд HelloWorld { public static void main(String[] args) { System.out.println("Салом ҷаҳон!"); } } // акнун шумо метавонед main() { System.out.println("Салом, Ҷаҳон!"); }
  • Пешнамоиши дуюми хусусияте илова карда шуд, ки ба созандагон имкон медиҳад, ки пеш аз занг задан ба super(...) ифодаҳоро муайян кунанд, ки барои ба таври возеҳ даъват кардани созандаи синфи волидайн аз созандаи синфи меросӣ истифода мешавад, агар ин ибораҳо ба мисоли аз ҷониби созанда сохташуда ишора накунанд. class Outer { void hello() { System.out.println("Салом"); } class Inner { Inner() { салом(); супер(); } } }
  • Татбиқи пешнамоиши сеюми арзишҳои миқдор илова карда шуд, ки имкон медиҳад додаҳои тағирнашаванда дар байни риштаҳо мубодила карда шаванд ва маълумот байни риштаҳои кӯдакона (арзишҳо мерос гирифта мешаванд). Арзишҳои фарогир барои иваз кардани механизми тағирёбандаҳои риштаи маҳаллӣ таҳия карда мешаванд ва ҳангоми истифодаи миқдори хеле зиёди риштаҳои виртуалӣ (ҳазорҳо ё миллионҳо риштаҳо) самараноктаранд. Тафовути асосии байни арзишҳои миқёсӣ ва тағирёбандаҳои риштаи маҳаллӣ дар он аст, ки аввалӣ як маротиба навишта мешаванд, дар оянда тағир дода намешаванд ва танҳо дар давоми иҷрои ришта дастрас мемонанд.
  • Пешнамоиши сеюми API-и Structured Concurrency барои озмоиш пешниҳод шудааст, ки таҳияи барномаҳои чанд риштаро тавассути коркарди вазифаҳои сершуморе, ки дар риштаҳои гуногун ҳамчун як блок иҷро мешаванд, содда мекунад.
  • Усулҳои дастрасии хотираи беруна (берун аз JVM), ки синфи sun.misc.Unsafe пешниҳод кардааст, бекор карда шудаанд ва барои нест кардан ба нақша гирифта шудаанд. Барои дастрасӣ ба хотираи берунӣ ва ҳамкорӣ бо коди беруна тавсия дода мешавад, ки API-и VarHandle ва API FFM (Function Function & Memory Foreign) -ро истифода баред.

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

Инчунин нашри нави мошини универсалии маҷозӣ GraalVM пешниҳод шудааст, ки барномаҳои иҷрошавандаро дар JavaScript (Node.js), Python, Ruby, R, ҳама забонҳои JVM (Java, Scala, Clojure, Kotlin) ва забонҳоро дастгирӣ мекунад. ки барои он биткоди LLVM тавлид кардан мумкин аст (C, C++, Rust). Илова ба дастгирии JDK 23, версияи нав истеъмоли хотира ва андозаи рамзи иҷрошавандаро оптимизатсия мекунад ва барои абзорҳо барои ворид кардани Python ва WebAssembly ба коди Java бо истифода аз маҷмӯаи JIT дастгирии пурра медиҳад.

Манбаъ: opennet.ru

Илова Эзоҳ