Нашри Java SE 14

Пас аз шаш моҳи рушд, Oracle озод карда шуд платформае JavaSE 14 (Java Platform, Edition Standard 14), лоиҳаи кушодаи 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 оғоз шуда, лоиҳа ба раванди нави рушд гузашт, ки давраи кӯтоҳтари ташаккули релизҳои навро дар назар дорад. Функсияҳои нав ҳоло дар як шохаи устоди доимо таҷдидшаванда таҳия шудааст, ки тағйироти тайёрро дар бар мегирад ва аз он филиалҳо ҳар шаш моҳ барои устувор кардани релизҳои нав шохаҳо ҷудо карда мешаванд.

Аз навоварй Java 14 метавонад щайд:

  • Добавлена экспериментальная поддержка мутобиқати намуна дар оператори "instanceof", ки ба шумо имкон медиҳад, ки фавран тағирёбандаи маҳаллиро барои дастрасӣ ба арзиши тафтишшуда муайян кунед. Масалан, шумо метавонед фавран "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" -ро бидуни муайян кардани "String s = (String) obj" нависед.

    буд:

    if (obj instanceof Group) {
    Гурӯҳи гурӯҳ = (Group)obj;
    var entries = group.getEntries();
    }

    Акнун шумо метавонед бидуни таърифи "Гурӯҳи гурӯҳ = (Гурӯҳ) obj" кор кунед:

    if (obj instanceof group) {
    var entries = group.getEntries();
    }

  • Добавлена экспериментальная поддержка нового ключевого слова «рекорд", ки шакли паймонеро барои муайян кардани синфҳо таъмин мекунад, ки ба шумо имкон медиҳад, ки аз муайян кардани усулҳои гуногуни сатҳи паст, ба монанди equals(), hashCode() ва toString() канорагирӣ кунед, дар ҳолатҳое, ки маълумот танҳо дар майдонҳое нигоҳ дошта мешавад, ки рафторашон тағир намеёбад. Вақте ки синф татбиқи стандартии усулҳои equals(), hashCode() ва toString()-ро истифода мебарад, он метавонад бидуни таърифи возеҳашон амал кунад:

    сабти ҷамъиятии муомилоти бонкӣ (Санаи маҳаллӣ,
    маблағи дукарата
    Тавсифи сатр) {}

    Ин эъломия ба таври худкор татбиқи усулҳои equals(), hashCode() ва toString() -ро ба ғайр аз усулҳои созанда ва гетер илова мекунад.

  • Стандартизирована и включена по умолчанию поддержка новой формы выражений «switch», не требующей указания оператора «break», позволяющей объединять повторяющиеся метки и допускающей использование не только в форме оператора, но и как выражения.

    var log = switch (event) {
    case PLAY -> «User has triggered the play button»;
    case STOP, PAUSE -> «User needs a break»;
    default -> {
    String message = event.toString();
    LocalDateTime now = LocalDateTime.now();
    yield «Unknown event » + message +
    » logged on » + now;
    }
    };

  • Расширена экспериментальная поддержка блокҳои матнӣ — новой формы строковых литералов, позволяющих включать в исходный код многострочные текстовые данные без применения в них экранирования символов и сохраняя исходное форматирования текста в блоке. Обрамление блока осуществляется тремя двойными кавычками. В Java 14 в текстовых блоках реализована поддержка escape-последовательности «\s» для определения одного пробела и «\» для объединения со следующей строкой (игнорирования перевода строки, когда нужно вывести очень длинную строку). Например, вместо кода

    Сатри html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 ин ҷост!\" » +
    "\n\t" + " » +
    "\n" + " ";

    шумо метавонед муайян кунед:

    Сатри html = """


    »Java 1\
    ин ҷост!

    """;

  • Расширена информативность диагностики при возникновении исключений 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 илова намуд новый механизм распределения памяти, учитывающий специфику работу на крупных системах, использующих архитектуру НУМА. Новый распределитель памяти включается при помощи флага «+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) c намерением удалить данные порты в будущем. Перевод указанных портов в разряд устаревших позволит сообществу ускорить разработку новых возможностей 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

Илова Эзоҳ