ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ Π½Π° Java SE 16

Π‘Π»Π΅Π΄ ΡˆΠ΅ΡΡ‚ΠΈΠΌΠ΅ΡΠ΅Ρ‡Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, компанията Oracle пусна ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Java SE 16 (Java Platform, Standard Edition 16), Π·Π° която сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° отворСният ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ OpenJDK ΠΊΠ°Ρ‚ΠΎ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π½Π° рСализация. Π’ Java SE 16 Π΅ Π·Π°ΠΏΠ°Π·Π΅Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ вСрсии Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Java, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ всички ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΎ написани Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Ρ‰Π΅ работят Π±Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΈ стартиранС ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ²Π°Ρ‚Π° вСрсия. Π“ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅ Π·Π° инсталиранС ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ Π½Π° Java SE 16 (JDK, JRE ΠΈ Server JRE) са ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ΠΈ Π·Π° Linux (x86_64, AArch64), Windows ΠΈ macOS. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½Π°Ρ‚Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° OpenJDK Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π½Π° рСализация Π½Π° Java 16 Π΅ напълно ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π· GPLv2 с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ GNU ClassPath, допускащи Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ с Ρ‚ΡŠΡ€Π³ΠΎΠ²ΡΠΊΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ.

Java SE 16 ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ към ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉΡ‚Π΅ издания с ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ срок Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°, обновлСния Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ пускани Π΄ΠΎ слСдващото ΠΈΠ·Π΄Π°Π½ΠΈΠ΅. Π—Π° вСрсия с дълъг срок Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° (LTS) трябва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Java SE 11, обновлСния Π·Π° която Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ пускани Π΄ΠΎ 2026 Π³ΠΎΠ΄ΠΈΠ½Π°. Π‘Π»Π΅Π΄Π²Π°Ρ‰ΠΎΡ‚ΠΎ LTS ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π΅ ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΎ Π·Π° сСптСмври 2021 Π³ΠΎΠ΄ΠΈΠ½Π°. НапомнямС, Ρ‡Π΅ ΠΎΡ‚ вСрсия Java 10 ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΏΡ€Π΅ΠΌΠΈΠ½Π° Π½Π° Π½ΠΎΠ² процСс Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΏΡ€Π΅Π΄Π²ΠΈΠΆΠ΄Π°Ρ‰ ΠΏΠΎ-ΠΊΡ€Π°Ρ‚ΡŠΠΊ Ρ†ΠΈΠΊΡŠΠ» Π½Π° Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π½ΠΎΠ²ΠΈ издания. Новата функционалност сСга сС Ρ€Π°Π·Π²ΠΈΠ²Π° Π² постоянно обновяСма основна ΠΊΠ»ΠΎΠ½ΠΊΠ°, Π² която сС Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ Π²Π΅Ρ‡Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΈ ΠΎΡ‚ която Π½Π° всСки ΡˆΠ΅ΡΡ‚ мСсСца сС отклоняват ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π·Π° стабилизиранС Π½Π° Π½ΠΎΠ²ΠΈΡ‚Π΅ издания.

ΠŸΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°Ρ‚Π° Π½Π° Π½ΠΎΠ²ΠΎΡ‚ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° бСшС прСмСстСна ΠΎΡ‚ систСмата Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° вСрсиитС Mercurial Π² Git ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π·Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° GitHub. ΠžΡ‡Π°ΠΊΠ²Π° сС миграцията Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ производитСлността Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, Π΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ СфСктивността Π½Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π΄Π° осигури Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π· цялата история Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° Ρ€Π΅Ρ†Π΅Π½Π·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΈ Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° API Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ процСси. ОсвСн Ρ‚ΠΎΠ²Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Git ΠΈ GitHub ΠΏΡ€Π°Π²ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎ-ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»Π΅Π½ Π·Π° Π½ΠΎΠ²Π°Ρ†ΠΈ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ, свикнали с Git.

ΠžΡ‚ Π½ΠΎΠ²ΠΎΠ²ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΡΡ‚Π° Π² Java 16 ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈΠΌ:

  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ СкспСримСнталСн ΠΌΠΎΠ΄ΡƒΠ» jdk.incubator.vector с рСализация Π½Π° API Vector, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‰ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΈ изчислСния, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΈ инструкции Π½Π° процСсоритС x86_64 ΠΈ AArch64 ΠΈ позволяват Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ към мноТСство стойности (SIMD). Π’ контСкста Π½Π° прСдоставСнитС ΠΎΡ‚ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° HotSpot Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° автовСкторизация Π½Π° скаларни ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, новият API позволява ясСн ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π²ΡŠΡ€Ρ…Ρƒ вСкторизацията Π·Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ.
  • Π’ ΠΊΠΎΠ΄Π° Π½Π° JDK ΠΈ VM HotSpot, написан Π½Π° C++, Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, появили сС Π² спСцификацията C++14. По-Ρ€Π°Π½ΠΎ бСшС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° стандартитС C++98/03.
  • Π’ сборщика Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ ZGC (Z Garbage Collector), Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ Π² пасивСн Ρ€Π΅ΠΆΠΈΠΌ ΠΈ с възмоТно Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎ забавянС ΠΏΠΎΡ€Π°Π΄ΠΈ ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ, Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° стСковСтС Π½Π° Π½ΠΈΡˆΠΊΠΈΡ‚Π΅ Π±Π΅Π· спиранС Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π½ΠΈΡˆΠΊΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π’ ZGC сСга остават само ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ изискват спиранС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΈ ΠΈΠΌΠ°Ρ‚ постоянни забавяния, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½Π΅ Π½Π°Π΄Π²ΠΈΡˆΠ°Π²Π°Ρ‰ΠΈ няколко стотин микросСкунди.
  • Π’ класовСтС SocketChannel, ServerSocketChannel ΠΈ java.nio.channels Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Unix-сокСти (AF_UNIX).
  • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ Π΅ ΠΏΠΎΡ€Ρ‚ Π·Π° Linux дистрибуцията Alpine със стандартната C Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° musl, която Π΅ популярна Π² срСди Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, микросСрвизи, ΠΎΠ±Π»Π°Ρ‡Π½ΠΈ ΠΈ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ систСми. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΡ‚ ΠΏΠΎΡ€Ρ‚ Π² Ρ‚Π°ΠΊΠΈΠ²Π° срСди позволява изпълнСниС Π½Π° Java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ прилоТСния. ОсвСн Ρ‚ΠΎΠ²Π°, с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° jlink, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ всички Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ Π΄Π° сС създадС ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π° срСда, Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½Π° Π·Π° изпълнСниС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ, спСцифични Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ прилоТСния.
  • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Elastic Metaspace, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Ρ‰ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ ΠΏΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Π·Π°Π΅ΠΌΠ°Π½Π° ΠΎΡ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° класовСтС (metaspace) Π² JVM HotSpot. ΠŸΡ€ΠΈΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° Elastic Metaspace намалява фрагмСнтацията Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, намалява Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π² Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° Π½Π° класовСтС, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΎΠΊΠ°Π·Π²Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΎ влияниС Π²ΡŠΡ€Ρ…Ρƒ производитСлността Π½Π° Π΄ΡŠΠ»Π³ΠΎΡ‚Ρ€Π°ΠΉΠ½ΠΈ ΡΡŠΡ€Π²ΡŠΡ€Π½ΠΈ прилоТСния Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎΡ‚ΠΎ Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма, Π·Π°Π΅ΠΌΠ°Π½Π° ΠΎΡ‚ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ Π½Π° класовСтС. Π—Π° ΠΈΠ·Π±ΠΎΡ€ Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠ° Π½Π° освобоТдаванС Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° слСд освобоТдаванС Π½Π° класовСтС Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° опцията "-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)".
  • Π”ΠΎΠ±Π°Π²Π΅Π½ JDK ΠΏΠΎΡ€Ρ‚ Π·Π° Windows систСми, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ Π½Π° ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅ с процСсори Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° AArch64.
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ Π΅ Ρ‚Ρ€Π΅Ρ‚ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π΅Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° API Foreign-Memory Access, ΠΊΠΎΠΉΡ‚ΠΎ позволява Π½Π° Java прилоТСнията бСзопасно ΠΈ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ области Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° извън Java ΠΊΡƒΠΏΡ‡ΠΈΠ½Π°Ρ‚Π°, ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°ΠΉΠΊΠΈ Π½ΠΎΠ²ΠΈΡ‚Π΅ абстракции MemorySegment, MemoryAddress ΠΈ MemoryLayout.
  • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ Π΅ СкспСримСнталСн API Foreign Linker, ΠΊΠΎΠΉΡ‚ΠΎ прСдоставя Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΎΡ‚ Java Π΄ΠΎ Π½Π°Ρ‚ΠΈΠ²Π΅Π½ ΠΊΠΎΠ΄. Новият интСрфСйс, Π·Π°Π΅Π΄Π½ΠΎ с API Foreign-Memory, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ опростява ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠΈ Π½Π°Π΄ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ сподСлСни Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° jpackage, която позволява ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° самостоятСлни (self-contained) Java прилоТСния. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π°Ρ‚Π° сС основава Π½Π° javapackager ΠΎΡ‚ JavaFX ΠΈ позволява Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈ, подходящи Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ (msi ΠΈ exe Π·Π° Windows, pkg ΠΈ dmg Π·Π° macOS, deb ΠΈ rpm Π·Π° Linux). ΠŸΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ всички Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ зависимости.
  • По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° строга инкапсулация Π½Π° всички Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° JDK, с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈΡ‚Π΅ API, ΠΊΠ°Ρ‚ΠΎ sun.misc.Unsafe. Бтойността Π½Π° опцията "--illegal-access" сСга ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½Π° Π½Π° "deny" вмСсто "permit", ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π±Π»ΠΎΠΊΠΈΡ€Π° ΠΎΠΏΠΈΡ‚ΠΈΡ‚Π΅ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΎΡ‚ ΠΊΠΎΠ΄ Π΄ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈ класовС, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π°. Π—Π° заобикалянС Π½Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ слСдва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° опцията "--illegal-access=permit".
  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π΅ рСализацията Π½Π° ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅ с ΠΎΠ±Ρ€Π°Π·Π΅Ρ† Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° "instanceof", която позволява Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ опрСдСлянС Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π°Ρ‚Π° стойност. НапримСр, ΠΌΠΎΠΆΠ΅ Π΄Π° сС пишС "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" Π±Π΅Π· явно ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ "String s = (String) obj". Π‘Π΅ΡˆΠ΅: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΌΠΈΠ½Π΅ Π±Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ "Group group = (Group) obj": if (obj instanceof Group group) { var entries = group.getEntries(); }
  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π΅ рСализацията Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° "record", която прСдоставя ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π° Ρ„ΠΎΡ€ΠΌΠ° Π·Π° опрСдСлянС Π½Π° класовС, позволяваща Π΄Π° сС ΠΌΠΈΠ½Π΅ Π±Π΅Π· явно ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ нискоуровнСви ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, ΠΊΠ°Ρ‚ΠΎ equals(), hashCode() ΠΈ toString(), Π² случаи, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ само Π² ΠΏΠΎΠ»Π΅Ρ‚Π°, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ сС промСня. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π² класа сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ стандартни ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ equals(), hashCode() ΠΈ toString(), Π² Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΌΠΈΠ½Π΅ Π±Π΅Π· тяхното явно ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅: public record BankTransaction(LocalDate date, double amount, String description) {}

    Π’ΠΎΠ²Π° извСстиС Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ добавянС Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ equals(), hashCode() ΠΈ toString(), Π² допълнСниС към конструктора ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‰ΠΈ промяна Π½Π° Π΄Π°Π½Π½ΠΈ (getter).

  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ Π²Ρ‚ΠΎΡ€ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π΅Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° Π·Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΈΡ‚Π΅ (β€žsealedβ€œ) класовС ΠΈ интСрфСйси, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈ класовС ΠΈ интСрфСйси Π·Π° наслСдяванС, Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π°Π½Π΅ ΠΈΠ»ΠΈ ΠΏΡ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° рСализацията. Π—Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΈΡ‚Π΅ класовС ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° прСдоставят ΠΏΠΎ-Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° супСркласа, Π² сравнСниС с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° явното изброяванС Π½Π° подкласовС, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ Π·Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster