Выпуск Java SE 14

Dopo sei mesi di sviluppo, Oracle ha rilasciato la piattaforma Java SE 14 (Java Platform, Standard Edition 14), в качестве эталонной реализации которой используется открытый проект OpenJDK. В Java SE 14 сохранена обратная совместимость с прошлыми выпусками платформы Java, все ранее написанные Java-проекты без изменений будут работоспособны при запуске под управлением новой версии. Готовые для установки сборки Java SE 14 (JDK, JRE и Server JRE) preparati per Linux (x86_64), Windows e macOS. L'implementazione di riferimento sviluppata nel progetto OpenJDK Java 14 è completamente open source sotto la licenza GPLv2 con eccezioni GNU ClassPath, che consentono il collegamento dinamico con prodotti commerciali.

Java SE 14 отнесён к категории выпусков с обычным сроком поддержки, обновления для которого будут выпускаться до следующего релиза. В качестве ветки с длительным сроком поддержки (LTS) следует использовать Java SE 11, обновления для которого будут выпускаться до 2026 года. Прошлая LTS-ветка Java 8 будет поддерживаться до декабря 2020 года. Следующий LTS-релиз намечен на сентябрь 2021 года. Напомним, что начиная с выпуска Java 10 проект перешёл на новый процесс разработки, подразумевающий более короткий цикл формирования новых релизов. Новая функциональность теперь развивается в одной постоянно обновляемой master-ветке, в которую включаются уже готовые изменения и от которой раз в шесть месяцев ответвляются ветки для стабилизации новых выпусков.

Da novità Java 14 è possibile selezionare:

  • Supporto sperimentale aggiunto corrispondenza con il modello nell'operatore «instanceof», che consente di definire immediatamente una variabile locale per accedere al valore verificato. Ad esempio, si può scrivere direttamente «if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}» senza la necessità di definire esplicitamente «String s = (String) obj».

    Era:

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

    Ora è possibile evitare la definizione «Group group = (Group) obj»:

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

  • Добавлена экспериментальная поддержка нового ключевого слова «record«, che fornisce una forma compatta per definire le classi, consentendo di fare a meno della definizione esplicita di vari metodi a basso livello come equals(), hashCode() e toString(), nei casi in cui i dati vengono memorizzati solo nei campi, il cui comportamento non cambia. Quando in una classe vengono utilizzate implementazioni generiche dei metodi equals(), hashCode() e toString(), è possibile evitarne la definizione esplicita:

    public record BankTransaction(LocalDate date,
    double amount,
    String description) {}

    Questa dichiarazione porterà all'aggiunta automatica delle implementazioni dei metodi equals(), hashCode() e toString() oltre al costruttore e ai metodi che controllano la modifica dei dati (getter).

  • Стандартизирована и включена по умолчанию поддержка новой формы выражений «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;
    }
    };

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

    String html = "<HTML>" +
    "\n\t" + "<BODY>" +
    «\n\t\t» + «<H1>\»Java 14 is here!\»</H1>» +
    "\n\t" + "</BODY>" +
    "\n" + "</HTML>";

    si può specificare:

    String html = """
    <HTML>
    <BODY>
    <H1>»Java 14\
    è qui!"</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.

  • Implementato предварительный вариант утилиты jpackage, позволяющей создавать пакеты для самодостаточных (self-contained) Java-приложений. Утилита базируется на javapackager из JavaFX и позволяет формировать пакеты в форматах, родных для различных платформ (msi и exe для Windows, pkg и dmg для macOS, deb и rpm для Linux). Пакеты включают все необходимые зависимости.
  • В сборщик мусора G1 è stato aggiunto новый механизм распределения памяти, учитывающий специфику работу на крупных системах, использующих архитектуру NUMA. Новый распределитель памяти включается при помощи флага «+XX:+UseNUMA» и позволяет существенно поднять производительность на NUMA-системах.
  • Aggiunto API для отслеживания на лету событий JFR (JDK Flight Recorder), например для организации непрерывного мониторинга.
  • Aggiunto модуль jdk.nio.mapmode, предлагающий новые режимы (READ_ONLY_SYNC, WRITE_ONLY_SYNC) для создания отображаемых байтовых буферов (MappedByteBuffer), ссылающихся на энергонезависимую память (NVM).
  • Implementato предварительный вариант API Foreign-Memory Access, позволяющий Java-приложениям безопасно и эффективно получить доступ к областям памяти, вне кучи Java, манипулируя новыми абстракциями MemorySegment, MemoryAddress и MemoryLayout.
  • Annunciati устаревшими порты для ОС Solaris и процессоров SPARC (Solaris/SPARC, Solaris/x64 и Linux/SPARC) c намерением удалить данные порты в будущем. Перевод указанных портов в разряд устаревших позволит сообществу ускорить разработку новых возможностей OpenJDK, не тратя время на поддержание особенностей, специфичных для Solaris и SPARC.
  • Rimosso сборщик мусора CMS (Concurrent Mark Sweep), который два года назад был отмечен устаревшим и остался без сопровождения (на смену CMS давно пришёл сборщик мусора G1). Кроме того, annunciato устаревшим применение комбинации алгоритмов сборки мусора ParallelScavenge и SerialOld (запуск с опциями «-XX:+UseParallelGC -XX:-UseParallelOldGC»).
  • Обеспечена экспериментальная поддержка сборщика мусора ZGC (Z Garbage Collector) на платформах macOS и Windows (ранее поддерживался только в Linux). ZGC работает в пассивном режиме, насколько это возможно минимизирует задержки из-за сборки мусора (время остановки при использовании ZGC не превышает 10 мс.) и может работать как с небольшими, так и с огромными кучами, размером от нескольких сотен мегабайт до многих терабайт.
  • Rimossi инструментарий и API для сжатия JAR-файлов с использованием алгоритма Pack200.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster