Π‘Π»Π΅Π΄ ΡΠ΅ΡΡΠΌΠ΅ΡΠ΅ΡΠ½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ 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 Π³ΠΎΠ΄ΠΈΠ½Π°.
Π‘ΡΠ΅Π΄ Π½ΠΎΠ²ΠΎΡΡΠΈΡΠ΅, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ Π² Java SE 23:
- ΠΠΊΠ»ΡΡΠ΅Π½ Π΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠ²Π½ΠΈΡΡ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΡΠ±ΠΎΡΡΠΈΠΊΠ° Π½Π° Π±ΠΎΠΊΠ»ΡΠΊ ZGC (Generational Z Garbage Collector), ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡΠ΄Π΅Π»Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° "ΡΡΠ°ΡΠΈ" ΠΈ "ΠΌΠ»Π°Π΄ΠΈ" ΠΎΠ±Π΅ΠΊΡΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ²ΠΈΡΠ°Π²Π° Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π½Π°ΡΠΊΠΎΡΠΎ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ Ρ ΠΌΠ°Π»ΡΠΊ ΠΆΠΈΠ·Π½Π΅Π½ ΡΠΈΠΊΡΠ». Π£ΠΏΠΎΡΡΠ΅Π±Π°ΡΠ° Π½Π° Generational ZGC Π½Π°ΠΌΠ°Π»ΡΠ²Π° ΡΠΈΡΠΊΠΎΠ²Π΅ΡΠ΅ ΠΎΡ ΡΠΏΠΈΡΠ°Π½Π΅ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ, ΡΠ½ΠΈΠΆΠ°Π²Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° CPU ΠΈ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΏΡΠΈ ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° Π±ΠΎΠΊΠ»ΡΠΊΠ°. Π’Π΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π½Π° Generational ZGC Ρ Apache Cassandra 4 ΠΏΠΎΠΊΠ°Π·Π°Ρ Π° ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΏΡΡΠΊΠ½Π°ΡΠ° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ ΡΠ΅ΡΠΈΡΠΈΠΊΡΠ°ΡΠ½ΠΎ ΠΏΡΠΈ ΡΠΈΠΊΡΠΈΡΠ°Π½ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΠΊΡΠΏΡΠΈΠ½Π°ΡΠ° (heap) ΠΈ Π½Π°ΠΌΠ°Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΊΡΠΏΡΠΈΠ½Π°ΡΠ° Ρ Π΅Π΄Π½Π° ΡΠ΅ΡΠ²ΡΡΡ ΠΏΡΠΈ Π½Π΅ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½Π° ΠΏΡΠΎΠΏΡΡΠΊΠ½Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ.
- Π JavaDoc Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Markdown ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π·Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π² ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΌΠ΅ΡΠΈΡΠ°ΡΠ° ΠΎΡ HTML ΠΈ @-ΡΠ΅Π³ΠΎΠ²Π΅ΡΠ΅ Π½Π° JavaDoc.

- ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈΡΠ΅ Π·Π° ΡΠΎΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ Ρ ΠΎΠ±ΡΠ°Π·Π΅Ρ ΡΠ° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ (int, byte, char ΠΈ Π΄ΡΡΠ³ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° ΠΎΠ±Π΅ΠΊΡΠΈ) Π² Π²ΡΠΈΡΠΊΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅ ΡΠ°Π±Π»ΠΎΠ½ΠΈ, Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° βinstanceofβ ΠΈ Π² Π±Π»ΠΎΠΊΠΎΠ²Π΅ΡΠ΅ βswitchβ. switch (x.getStatus()) { case 0 -> βΠΎΠΊΠ΅ΠΉβ; case 1 -> βΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅β; case 2 -> βΠ³ΡΠ΅ΡΠΊΠ°β; case int i -> βΠ½Π΅ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΡΡΠ°ΡΡΡ: β + 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-ΠΌΠ°ΠΈ-16 ΡΠ΅ΡΠ²ΡΡΡΡΠΊ
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π²ΡΠΎΡΠ° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΎΡΠΎ 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 Π·Π° ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½Π° ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡ (Structured Concurrency), ΠΊΠΎΠΉΡΠΎ ΠΎΠΏΡΠΎΡΡΡΠ²Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠ°ΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π·Π°Π΄Π°ΡΠΈ, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ΠΈ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠΎΡΠΎΡΠΈ, ΠΊΠ°ΡΠΎ Π΅Π΄ΠΈΠ½Π΅Π½ Π±Π»ΠΎΠΊ.
- ΠΠ±ΡΠ²Π΅Π½ΠΈ Π·Π° ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ ΠΈ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅Π½ΠΈ Π·Π° ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ ΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π²ΡΠ½ΡΠ½Π° ΠΏΠ°ΠΌΠ΅Ρ (ΠΈΠ·Π²ΡΠ½ JVM), ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½ΠΈ ΠΎΡ ΠΊΠ»Π°ΡΠ° sun.misc.Unsafe. ΠΠ° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΏΠ°ΠΌΠ΅Ρ ΠΈΠ·Π²ΡΠ½ ΠΊΡΠΏΡΠΈΠ½Π°ΡΠ° (off-heap) ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π²ΡΠ½ΡΠ΅Π½ ΠΊΠΎΠ΄ ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ API VarHandle ΠΈ API FFM (Foreign Function & Memory).
ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Π³ΡΠ°ΡΠΈΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ JavaFX 23 ΠΈ Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° GraalVM Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΡΡΡΡΠ°Π² Π½Π° 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

