ΠŸΡƒΡΠ½Π°Ρ‚ΠΎ Π΅ Java SE 14

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

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

ΠžΡ‚ нововъвСдСния Java 14 ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΌΠ΅Ρ€ΠΈ Π΄Π° ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈΠΌ:

  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ СкспСримСнтална ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° сопоставянС с ΠΎΠ±Ρ€Π°Π·Π΅Ρ† Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Β«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).

  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½Π° ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° новия Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π° ΠΈΠ·Ρ€Π°Π·ΠΈ Β«switchΒ», ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ изисква ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Β«breakΒ», позволяващ обСдиняванС Π½Π° повтарящи сС Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ ΠΈ позволяващ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π΅ само Π² Ρ„ΠΎΡ€ΠΌΠ° Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Π½ΠΎ ΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ€Π°Π·.

    var log = switch (event) {
    case PLAY -> Β«ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΡ‚ Π΅ задСйствал Π±ΡƒΡ‚ΠΎΠ½Π° Π·Π° Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅Β»;
    case STOP, PAUSE -> Β«ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΡ‚ сС Π½ΡƒΠΆΠ΄Π°Π΅ ΠΎΡ‚ ΠΏΠΎΡ‡ΠΈΠ²ΠΊΠ°Β»;
    default -> {
    String message = event.toString();
    LocalDateTime now = LocalDateTime.now();
    yield «НСизвСстно ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅ Β» + message +
    » записано на » + now;
    }
    };

  • Π Π°Π·ΡˆΠΈΡ€Π΅Π½Π° СкспСримСнтална ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° тСкстови Π±Π»ΠΎΠΊΠΎΠ²Π΅ β€” Π½ΠΎΠ² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π° стрингови Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ позволява Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π² изходния ΠΊΠΎΠ΄ Π½Π° многостранни тСкстови Π΄Π°Π½Π½ΠΈ Π±Π΅Π· нСобходимост ΠΎΡ‚ Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π°Π½Π΅ Π½Π° символи ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΎΡ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° тСкста Π² Π±Π»ΠΎΠΊΠ°. ΠžΠ±Ρ€Π°ΠΌΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±Π»ΠΎΠΊΠ° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° с Ρ‚Ρ€ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΈ ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ. Π’ Java 14 Π² тСкстовитС Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° escape-послСдоватСлност Β«\sΒ» Π·Π° опрСдСлянС Π½Π° Π΅Π΄Π½ΠΎ пространство ΠΈ Β«\Β» Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ с слСдващия Ρ€Π΅Π΄ (ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° новия Ρ€Π΅Π΄, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° сС ΠΈΠ·Π²Π΅Π΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ дълъг Ρ€Π΅Π΄). НапримСр, вмСсто ΠΊΠΎΠ΄

    String html = Β«<HTML>Β» +
    Β«\n\tΒ» + Β«<BODY>Β» +
    Β«\n\t\tΒ» + Β«<H1>\Β»Java 14 Π΅ Ρ‚ΡƒΠΊ!\Β»<\/H1>Β» +
    Β«\n\tΒ» + Β«<\/BODY>Β» +
    Β«\nΒ» + Β«<\/HTML>Β»;

    ΠΌΠΎΠΆΠ΅ Π΄Π° сС посочи:

    String html = «»»
    <HTML>
    <BODY>
    <H1>Β»Java 14\
    Π΅ Ρ‚ΡƒΠΊ!Β»<\/H1>
    <\/BODY>
    <\/HTML>»»»;

  • Π Π°Π·ΡˆΠΈΡ€Π΅Π½Π° информативност ΠΏΡ€ΠΈ диагностика ΠΏΡ€ΠΈ възникванС Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ NullPointerException. Ако ΠΏΡ€Π΅Π΄ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ° само сС позовавашС Π½Π° Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° Ρ€Π΅Π΄Π°, сСга Π² Π½Π΅Π³ΠΎ сС Π΄Π΅Ρ‚Π°Π»ΠΈΠ·ΠΈΡ€Π° ΠΊΠΎΠΉ ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π΅ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π» ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π Π°Π·ΡˆΠΈΡ€Π΅Π½Π°Ρ‚Π° диагностика Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° сС Π²ΠΊΠ»ΡŽΡ‡Π²Π° само ΠΏΡ€ΠΈ стартиранС с Ρ„Π»Π°Π³Π° Β«-XX:+ShowCodeDetailsInExceptionMessagesΒ». НапримСр, ΠΏΡ€ΠΈ ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ Ρ„Π»Π°Π³, ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² Ρ€Π΅Π΄Π°

    var name = user.getLocation().getCity().getName();

    Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ

    Exception in thread Β«mainΒ» java.lang.NullPointerException: Cannot invoke Β«Location.getCity()Β»
    because the return value of Β«User.getLocation()Β» is null
    at NullPointerExample.main(NullPointerExample.java:5):5)

    ΠΊΠΎΠ΅Ρ‚ΠΎ позволява Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π΅, Ρ‡Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ Location.getCity() Π½Π΅ Π΅ Π±ΠΈΠ» ΠΈΠ·Π²ΠΈΠΊΠ°Π½, Π° User.getLocation() Π΅ Π²ΡŠΡ€Π½Π°Π» стойност null.

  • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π΅Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ‚Π° jpackage, позволяваща ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° ΡΠ°ΠΌΠΎΠ΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΈ (self-contained) Java прилоТСния. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π°Ρ‚Π° сС основава Π½Π° javapackager ΠΎΡ‚ JavaFX ΠΈ позволява Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈ, спСцифични Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ (msi ΠΈ exe Π·Π° Windows, pkg ΠΈ dmg Π·Π° macOS, deb ΠΈ rpm Π·Π° Linux). ΠŸΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ всички Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ зависимости.
  • Π’ сборщика Π½Π° мусор G1 Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ Π½ΠΎΠ² ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π²Π·Π΅ΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ спСцификата Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² Π³ΠΎΠ»Π΅ΠΌΠΈ систСми, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° NUMA. Новият Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π» Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° Ρ‡Ρ€Π΅Π· Ρ„Π»Π°Π³Π° Β«+XX:+UseNUMAΒ» ΠΈ позволява Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ повишаванС Π½Π° производитСлността Π½Π° NUMA-систСмитС.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ API Π·Π° прослСдяванС Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡ JFR (JDK Flight Recorder), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ» jdk.nio.mapmode, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‰ Π½ΠΎΠ²ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠΈ (READ_ONLY_SYNC, WRITE_ONLY_SYNC) Π·Π° създаванС Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ€Π°Π½ΠΈ Π±Π°ΠΉΡ‚ΠΎΠ²ΠΈ Π±ΡƒΡ„Π΅Ρ€ΠΈ (MappedByteBuffer), ΠΊΠΎΠΈΡ‚ΠΎ сС отнасят Π΄ΠΎ СнСргонСзависима ΠΏΠ°ΠΌΠ΅Ρ‚ (NVM).
  • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π΅Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° API Foreign-Memory Access, позволяващ Π½Π° Java прилоТСнията Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ бСзопасСн ΠΈ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ области Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° извън Java ΠΊΡƒΠΏΡ‡ΠΈΠ½Π°Ρ‚Π°, ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°ΠΉΠΊΠΈ Π½ΠΎΠ²ΠΈΡ‚Π΅ абстракции MemorySegment, MemoryAddress ΠΈ MemoryLayout.
  • ОбявСни устарСли ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅ Π·Π° ОБ Solaris ΠΈ процСсори SPARC (Solaris/SPARC, Solaris/x64 ΠΈ Linux/SPARC) с Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΈ Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅. ΠšΠ»Π°ΡΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π΅Π·ΠΈ ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅ ΠΊΠ°Ρ‚ΠΎ устарСли Ρ‰Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° общността Π΄Π° ускори Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° Π½ΠΎΠ²ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π² OpenJDK, Π±Π΅Π· Π΄Π° Π³ΡƒΠ±ΠΈ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° спСцифични особСности Π·Π° Solaris ΠΈ SPARC.
  • ΠŸΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΎ ΡΡŠΠ±ΠΈΡ€Π°Ρ‡ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ CMS (Concurrent Mark Sweep), ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΈ Π΄Π²Π΅ Π³ΠΎΠ΄ΠΈΠ½ΠΈ Π±Π΅ обявСн Π·Π° остарял ΠΈ остана Π±Π΅Π· ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° (CMS Π±Π΅ Π·Π°ΠΌΠ΅Π½Π΅Π½ ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ€Π°Ρ‡Π° Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ G1). ОсвСн Ρ‚ΠΎΠ²Π°, обявСно остарял ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈΡ‚Π΅ Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ ParallelScavenge ΠΈ SerialOld (изпълнСниС с ΠΎΠΏΡ†ΠΈΠΈ Β«-XX:+UseParallelGC -XX:-UseParallelOldGCΒ»).
  • осигурСна Π΅ СкспСримСнтална ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‡Π° Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ ZGC (Z Garbage Collector) Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ macOS ΠΈ Windows (ΠΏΠΎ-Ρ€Π°Π½ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ само Π² Linux). ZGC Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² пасивСн Ρ€Π΅ΠΆΠΈΠΌ, ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΉΠΊΠΈ забавянията ΠΏΡ€ΠΈ ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊΠ° (Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° спиранС ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ZGC Π½Π΅ надвишава 10 мс.) ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ с ΠΌΠ°Π»ΠΊΠΈ ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΡƒΠΏΡ‡ΠΈΠ½ΠΈ, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡ‚ няколко стотин ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π° Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚ΠΈ.
  • ΠŸΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΈ са инструмСнти ΠΈ API Π·Π° компрСсиранС Π½Π° JAR Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Pack200.

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

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