Выпуск 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). Разработанная Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° OpenJDK эталонная рСализация Java 23 ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π° ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ 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 Π³ΠΎΠ΄Π°.

Π‘Ρ€Π΅Π΄ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² Java SE 23 Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²:

  • Π’ΠΊΠ»ΡŽΡ‡Ρ‘Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ сборщика мусора ZGC (Generational Z Garbage Collector), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ «ΡΡ‚Π°Ρ€Ρ‹Ρ…» ΠΈ «ΠΌΠΎΠ»ΠΎΠ΄Ρ‹Ρ…» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ очистки Π½Π΅Π΄Π°Π²Π½ΠΎ созданных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с нСбольшим Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Generational ZGC ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ риски приостановок Π²ΠΎ врСмя выдСлСния рСсурсов, сниТаСт Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° CPU ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΡ€ΠΈ сборкС мусора. ВСстированиС Generational ZGC с Apache Cassandra 4 ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ пропускной способности Π² 4 Ρ€Π°Π·Π° ΠΏΡ€ΠΈ фиксированном Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ ΠΊΡƒΡ‡ΠΈ (heap) ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΡƒΡ‡ΠΈ Π½Π° Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΡŒ ΠΏΡ€ΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΉ пропускной способности.
  • Π’ JavaDoc Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° использования Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Markdown для докумСнтирования ΠΊΠΎΠ΄Π° Π² коммСнтариях, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто смСси ΠΈΠ· HTML ΠΈ @-Ρ‚Π΅Π³ΠΎΠ² JavaDoc.
    Выпуск Java SE 23 ΠΈ OpenJDK 23
  • ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ сопоставлСния с ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ использования ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² (int, byte, char ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ) Π²ΠΎ всСх Π²ΠΈΠ΄Π°Ρ… шаблонов, Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ «instanceof» ΠΈ Π² Π±Π»ΠΎΠΊΠ°Ρ… «switch». switch (x.getStatus()) { case 0 -> «okay»; case 1 -> «warning»; case 2 -> «error»; case int i -> «unknown status: » + i; } if (i instanceof byte b) { … b … }
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° использования ΠΎΠ΄Π½ΠΎΠ³ΠΎ выраТСния «import module M» для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° сразу всСх ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², экспортируСмых ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ. ИзмСнСниС сущСствСнно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, позволяя ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ классы Π±Π΅Π· опрСдСлСния ΠΈΡ… мСста Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². НапримСр, ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ «import module java.base» ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρƒ всСх 54 ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², входящих Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒ java.base, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π±Ρ‹ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ ΠΏΠΎ-ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ («import java.io.*», «import java.util.*» ΠΈ Ρ‚.ΠΏ.).

    ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° вторая ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ рСализация API Class-File для Ρ€Π°Π·Π±ΠΎΡ€Π°, Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ прСобразования Ρ„Π°ΠΉΠ»ΠΎΠ² с классами Java. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue().startsWith(«debug»))) { classBuilder.with(ce); } } });

  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° восьмая ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ рСализация API Vector, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ… вычислСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ с использованиСм Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ… инструкций процСссоров x86_64 ΠΈ AArch64 ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сразу ΠΊ нСскольким значСниям (SIMD). Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ прСдоставляСмых Π² JIT-компиляторС HotSpot возмоТностСй ΠΏΠΎ Π°Π²Ρ‚ΠΎΠ²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ скалярных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π½ΠΎΠ²Ρ‹ΠΉ API Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ явно ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….
  • Π’ класс java.io.Console Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ format, printf, readPassword ΠΈ readLine для форматирования, Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ чтСния тСкста с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ. System.console().printf(Locale.FRANCE, «%1$tY-%1$tB-%1$te %1$tA», new Date()) 2024-mai-16 jeudi
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° вторая ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ рСализация Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ API Stream, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ собствСнных ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² случаях, ΠΊΠΎΠ³Π΄Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… встроСнных ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ нСдостаточно для ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ прСобразования Π΄Π°Π½Π½Ρ‹Ρ…. БобствСнныС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π½ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Stream::gather(Gatherer), которая ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ элСмСнты ΠΏΠΎΡ‚ΠΎΠΊΠ°, примСняя ΠΊ Π½ΠΈΠΌ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ. 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]]
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Ρ‚Ρ€Π΅Ρ‚ΡŒΡ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ рСализация нСявно ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… классов ΠΈ бСзымянных экзСмпляров ΠΌΠ΅Ρ‚ΠΎΠ΄Π° «main», Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· объявлСний public/static, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ массива Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… сущностСй, связанных с объявлСниСм класса. // Π±Ρ‹Π»ΠΎ public class HelloWorld { public static void main(String[] args) { System.out.println(«Hello world!»); } } // Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ void main() { System.out.println(«Hello, World!»); }
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ возмоТности, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π² конструкторах Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ super(…), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для явного Π²Ρ‹Π·ΠΎΠ²Π° конструктора Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса ΠΈΠ· конструктора наслСдуСмого класса, Ссли эти выраТСния Π½Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° создаваСмый конструктором экзСмпляр. class Outer { void hello() { System.out.println(«Hello»); } class Inner { Inner() { hello(); super(); } } }
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Ρ‚Ρ€Π΅Ρ‚ΡŒΡ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ рСализация ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Scoped Values), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСизмСняСмыС Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… ΠΈ эффСктивно ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ (значСния Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ). Scoped Values Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‚ΡΡ для Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΡƒ (thread-local variables) ΠΈ Π±ΠΎΠ»Π΅Π΅ эффСктивны ΠΏΡ€ΠΈ использовании ΠΎΡ‡Π΅Π½ΡŒ большого числа Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (тысячи ΠΈ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²). Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Scoped Values ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π² дальнСйшСм Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° врСмя выполнСния ΠΏΠΎΡ‚ΠΎΠΊΠ°.
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ для тСстирования Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ API для cΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° (Structured Concurrency), ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π·Π° счёт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡, выполняСмых Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…, ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°.
  • ΠžΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌΠΈ ΠΈ Π½Π°ΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа ΠΊ внСшнСй памяти (Π²Π½Π΅ JVM), прСдоставляСмыС классом sun.misc.Unsafe. Для обращСния ΠΊ памяти Π²Π½Π΅ ΠΊΡƒΡ‡ΠΈ (off-heap) ΠΈ взаимодСйствия с внСшними ΠΊΠΎΠ΄ΠΎΠΌ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ API VarHandle ΠΈ API FFM (Foreign Function & Memory).

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ обновлСния ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ для создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с графичСским интСрфСйсом JavaFX 23 ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² основной состав Oracle JDK 23 JIT-компилятора GraalVM.

Π’Π°ΠΊΠΆΠ΅ прСдставлСн Π½ΠΎΠ²Ρ‹ΠΉ выпуск ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ GraalVM, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ запуск ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° JavaScript (Node.js), Python, Ruby, R, Π»ΡŽΠ±Ρ‹Ρ… языках для JVM (Java, Scala, Clojure, Kotlin) ΠΈ языках, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΠΈΡ‚ΠΊΠΎΠ΄ LLVM (C, C++, Rust). ΠšΡ€ΠΎΠΌΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ JDK 23 Π² Π½ΠΎΠ²ΠΎΠΉ вСрсии ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° оптимизация потрСблСния памяти ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° исполняСмого ΠΊΠΎΠ΄Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° полноцСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° срСдств для встраивания Python ΠΈ WebAssembly Π² Java-ΠΊΠΎΠ΄ с использованиСм JIT-компиляции.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru