Java SE 14 хувилбар

Зургаан сарын хөгжүүлэлтийн дараа Oracle гаргасан платформ Жава SE 14 (Java Platform, Standard Edition 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 он хүртэл шинэчлэлтүүдийг хүлээн авах болно. Java 8-ийн өмнөх LTS салбар нь 2020 оны 2021-р сар хүртэл дэмжигдэх болно. Дараагийн LTS хувилбарыг 10 оны XNUMX-р сард гаргахаар төлөвлөж байна. Java XNUMX-ийг гаргаснаас хойш төсөл нь шинэ хөгжүүлэлтийн процесст шилжсэн нь шинэ хувилбаруудыг бий болгох богино мөчлөгийг илтгэж байсныг эргэн санацгаая. Байнга шинэчлэгдэж байдаг нэг мастер салбарт шинэ функцийг хөгжүүлсэн бөгөөд үүнд бэлэн өөрчлөлтүүд багтаж, шинэ хувилбаруудыг тогтворжуулахын тулд зургаан сар тутамд салбаруудыг салбарладаг.

Эхлээд инноваци Java 14 болно тэмдэг:

  • Добавлена экспериментальная поддержка загвар тааруулах "instanceof" оператор дээр байгаа бөгөөд энэ нь шалгасан утгад хандахын тулд локал хувьсагчийг нэн даруй тодорхойлох боломжийг олгодог. Жишээлбэл, та "String s = (String) obj"-г тодорхой тодорхойлохгүйгээр "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" гэж шууд бичиж болно.

    Энэ нь:

    if (obj instanceof Group) {
    Бүлгийн бүлэг = (Бүлэг) obj;
    var entry = group.getEntries();
    }

    Одоо та "Group group = (Group) obj" гэсэн тодорхойлолтгүйгээр хийж болно:

    if (Бүлгийн бүлгийн объект) {
    var entry = 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

сэтгэгдэл нэмэх