Versiunea Java SE 14

După șase luni de dezvoltare, Oracle a lansat platformă JavaSE 14 (Java Platform, Standard Edition 14), proiectul open-source OpenJDK este folosit ca implementare de referință. Java SE 14 menține compatibilitatea cu versiunile anterioare ale platformei Java; toate proiectele Java scrise anterior vor funcționa fără modificări atunci când sunt lansate sub noua versiune. Build-uri Java SE 14 gata de instalat (JDK, JRE și Server JRE) pregătit pentru Linux (x86_64), Windows și macOS. Implementarea de referință dezvoltată de proiectul OpenJDK Java 14 este complet open source sub licența GPLv2, cu excepții GNU ClassPath care permit conectarea dinamică cu produse comerciale.

Java SE 14 este clasificat ca o versiune de asistență generală și va continua să primească actualizări până la următoarea ediție. Suportul pe termen lung (LTS) ar trebui să fie Java SE 11, care va continua să primească actualizări până în 2026. Ramura LTS anterioară a Java 8 va fi acceptată până în decembrie 2020. Următoarea lansare LTS este programată pentru septembrie 2021. Să vă reamintim că începând cu lansarea Java 10, proiectul a trecut la un nou proces de dezvoltare, implicând un ciclu mai scurt pentru formarea de noi versiuni. Noua funcționalitate este acum dezvoltată într-o ramură principală actualizată constant, care include modificări gata făcute și din care ramurile sunt ramificate la fiecare șase luni pentru a stabiliza noile versiuni.

De inovații Java 14 Se poate marca:

  • Добавлена экспериментальная поддержка potrivire de model în operatorul „instanceof”, care vă permite să definiți imediat o variabilă locală pentru a accesa valoarea bifată. De exemplu, puteți scrie imediat „if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” fără a defini în mod explicit „String s = (String) obj”.

    A fost:

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

    Acum puteți face fără definiția „Group group = (Group) obj”:

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

  • Добавлена экспериментальная поддержка нового ключевого слова «record", care oferă o formă compactă pentru definirea claselor, permițându-vă să evitați definirea explicită a diferitelor metode de nivel scăzut, cum ar fi equals(), hashCode() și toString() în cazurile în care datele sunt stocate numai în câmpuri al căror comportament nu se modifică. Când o clasă utilizează implementări standard ale metodelor equals(), hashCode() și toString(), se poate face fără definiția lor explicită:

    înregistrare publică BankTransaction (data LocalDate,
    suma dubla
    Descriere șir) {}

    Această declarație va adăuga automat implementări ale metodelor equals(), hashCode() și toString() în plus față de metodele 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;
    }
    };

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

    String html = " » +
    "\n\t" + " » +
    "\n\t\t" + " „Java 1 este aici!” » +
    "\n\t" + " » +
    "\n" + " ";

    poti specifica:

    String html = """


    »Java 1\
    este aici!

    """;

  • Расширена информативность диагностики при возникновении исключений 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 adăugat новый механизм распределения памяти, учитывающий специфику работу на крупных системах, использующих архитектуру NUMA. Новый распределитель памяти включается при помощи флага «+XX:+UseNUMA» и позволяет существенно поднять производительность на NUMA-системах.
  • Adăugat API для отслеживания на лету событий JFR (JDK Flight Recorder), например для организации непрерывного мониторинга.
  • Adăugat модуль 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.
  • Șters сборщик мусора CMS (Concurrent Mark Sweep), который два года назад был отмечен устаревшим и остался без сопровождения (на смену CMS давно пришёл сборщик мусора G1). Кроме того, a anunţat устаревшим применение комбинации алгоритмов сборки мусора ParallelScavenge и SerialOld (запуск с опциями «-XX:+UseParallelGC -XX:-UseParallelOldGC»).
  • Обеспечена экспериментальная поддержка сборщика мусора ZGC (Z Garbage Collector) на платформах macOS и Windows (ранее поддерживался только в Linux). ZGC работает в пассивном режиме, насколько это возможно минимизирует задержки из-за сборки мусора (время остановки при использовании ZGC не превышает 10 мс.) и может работать как с небольшими, так и с огромными кучами, размером от нескольких сотен мегабайт до многих терабайт.
  • Șters инструментарий и API для сжатия JAR-файлов с использованием алгоритма Pack200.

Sursa: opennet.ru

Adauga un comentariu