Versió de Java SE 14

Després de sis mesos de desenvolupament, Oracle alliberat plataforma JavaSE 14 (Java Platform, Standard Edition 14), el projecte OpenJDK de codi obert s'utilitza com a implementació de referència. Java SE 14 manté la compatibilitat amb versions anteriors de la plataforma Java tots els projectes Java escrits anteriorment funcionaran sense canvis quan s'executen amb la nova versió. Compil·lacions de Java SE 14 llestes per instal·lar (JDK, JRE i Server JRE) preparat per a Linux (x86_64), Windows i macOS. Implementació de referència desenvolupada pel projecte OpenJDK java 14 és de codi obert totalment sota la llicència GPLv2, amb excepcions de GNU ClassPath que permeten l'enllaç dinàmic amb productes comercials.

Java SE 14 es classifica com una versió de suport general i continuarà rebent actualitzacions fins a la propera versió. La branca de suport a llarg termini (LTS) hauria de ser Java SE 11, que continuarà rebent actualitzacions fins al 2026. La branca LTS anterior de Java 8 serà compatible fins al desembre de 2020. El proper llançament de LTS està programat per al setembre de 2021. Us recordem que a partir del llançament de Java 10, el projecte va passar a un nou procés de desenvolupament, la qual cosa implicava un cicle més curt per a la formació de nous llançaments. Ara es desenvolupa una nova funcionalitat en una branca mestra que s'actualitza constantment, que inclou canvis ja fets i des de la qual es ramifiquen cada sis mesos per estabilitzar les noves versions.

D' innovacions java 14 un pot marca:

  • Добавлена экспериментальная поддержка concordança de patrons a l'operador "instanceof", que us permet definir immediatament una variable local per accedir al valor marcat. Per exemple, podeu escriure immediatament "si (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" sense definir explícitament "String s = (String) obj".

    Era:

    if (obj instanceof Group) {
    Grup grup = (Grup) obj;
    var entrades = group.getEntries();
    }

    Ara podeu prescindir de la definició "Group group = (Group) obj":

    if (instància objecte del grup del grup) {
    var entrades = group.getEntries();
    }

  • Добавлена экспериментальная поддержка нового ключевого слова «registre", que proporciona una forma compacta per definir classes, que us permet evitar definir explícitament diversos mètodes de baix nivell com ara equals(), hashCode() i toString() en els casos en què les dades només s'emmagatzemen en camps el comportament dels quals no canvia. Quan una classe utilitza implementacions estàndard dels mètodes equals(), hashCode() i toString(), pot prescindir de la seva definició explícita:

    registre públic Transacció bancària (data LocalDate,
    doble quantitat
    descripció de la cadena) {}

    Aquesta declaració afegirà automàticament implementacions dels mètodes equals(), hashCode() i toString() a més dels mètodes constructor i 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;
    }
    };

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

    String html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 ja és aquí!" » +
    "\n\t" + " » +
    "\n" + " ";

    pots especificar:

    String html = """


    »Java 1\
    és aquí!

    """;

  • Расширена информативность диагностики при возникновении исключений 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.

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

Font: opennet.ru

Afegeix comentari