Java SE 14 發布

經過六個月的開發,Oracle 已發布 該平台 JavaSE 14 (Java 平台,標準版 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」運算子中,它允許您立即定義一個局部變數來存取檢查的值。 例如,您可以立即編寫“if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}”,而無需明確定義“String s = (String) obj 」。

    曾是:

    if (obj實例組) {
    組group = (組) obj;
    var 條目 = group.getEntries();
    }

    現在你可以不用定義「Group group = (Group) obj」:

    if (obj instanceof Group 群組) {
    var 條目 = group.getEntries();
    }

  • Добавлена экспериментальная поддержка нового ключевого слова «記錄”,它為定義類別提供了一種緊湊的形式,允許您在資料僅儲存在行為不變的欄位中的情況下避免明確定義各種低階方法,例如equals()、hashCode() 和toString( )。 當一個類別使用 equals()、hashCode() 和 toString() 方法的標準實作時,它可以不需要它們的明確定義:

    公共記錄 BankTransaction(LocalDate 日期,
    雙倍金額
    字串描述){}

    除了建構函式和 getter 方法之外,此宣告還會自動加入 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\
    在這兒!

    """;

  • Расширена информативность диагностики при возникновении исключений 空指針異常. Если раньше сообщение об ошибке лишь ссылалось на номер строки, то теперь в нём детализируется какой из методов вызвал исключение. Расширенная диагностика пока включается только при запуске с флагом «-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) 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

添加評論