Java SE 14 leidimas

Po šešių mėnesių plėtros „Oracle“. paleistas platforma „Java SE 14“ (Java platforma, standartinis leidimas 14), atvirojo kodo OpenJDK projektas naudojamas kaip nuoroda. „Java SE 14“ palaiko atgalinį suderinamumą su ankstesniais „Java“ platformos leidimais, paleidus naują versiją, visi anksčiau parašyti „Java“ projektai veiks be pakeitimų. Paruoštos įdiegti Java SE 14 versijos (JDK, JRE ir Server JRE) paruoštas skirta Linux (x86_64), Windows ir macOS. OpenJDK projekto sukurtas referencinis diegimas java 14 yra visiškai atviro kodo pagal GPLv2 licenciją, su GNU ClassPath išimtimis, leidžiančiomis dinamiškai susieti su komerciniais produktais.

„Java SE 14“ yra klasifikuojama kaip bendras palaikymo leidimas ir bus atnaujinamas iki kito leidimo. Ilgalaikio palaikymo (LTS) filialas turėtų būti Java SE 11, kuris ir toliau gaus atnaujinimus iki 2026 m. Ankstesnė LTS „Java 8“ atšaka bus palaikoma iki 2020 m. gruodžio mėn. Kitas LTS leidimas numatytas 2021 m. rugsėjo mėn. Priminsime, kad nuo „Java 10“ išleidimo projektas perėjo prie naujo kūrimo proceso, o tai reiškia trumpesnį naujų leidimų formavimo ciklą. Naujos funkcijos dabar sukurtos vienoje nuolat atnaujinamoje pagrindinėje šakoje, kuri apima paruoštus pakeitimus ir iš kurios šakos kas šešis mėnesius atšakojamos siekiant stabilizuoti naujus leidimus.

Nuo naujoves java 14 vienas gali ženklas:

  • Добавлена экспериментальная поддержка modelio derinimas operatoriuje „instanceof“, kuris leidžia iš karto apibrėžti vietinį kintamąjį, kad pasiektumėte patikrintą reikšmę. Pavyzdžiui, galite iš karto parašyti „if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}“ aiškiai neapibrėždami „String s = (String) obj“.

    Tai buvo:

    if (grupės objektas) {
    Grupės grupė = (Grupė) obj;
    var įrašai = group.getEntries();
    }

    Dabar galite apsieiti be apibrėžimo „Grupės grupė = (Grupė) obj“:

    if (grupės grupės objektas) {
    var įrašai = group.getEntries();
    }

  • Добавлена экспериментальная поддержка нового ключевого слова «įrašas“, kuri suteikia kompaktišką klasių apibrėžimo formą, leidžiančią vengti aiškiai apibrėžti įvairius žemo lygio metodus, tokius kaip equals(), hashCode() ir toString() tais atvejais, kai duomenys saugomi tik laukuose, kurių elgsena nesikeičia. Kai klasė naudoja standartinius equals(), hashCode() ir toString() metodų įgyvendinimus, ji gali apsieiti be aiškaus jų apibrėžimo:

    viešas įrašas BankTransaction (LocalDate data,
    dviguba suma
    Eilutės aprašas) {}

    Ši deklaracija, be konstruktoriaus ir geterio metodų, automatiškai pridės ir lygių(), hashCode() ir toString() metodų įgyvendinimus.

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

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

    Eilutė html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 jau čia!\" » +
    "\n\t" + " » +
    "\n" + " ";

    galite nurodyti:

    Eilutė html = """


    »Java 1\
    čia!

    """;

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

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

Šaltinis: opennet.ru

Добавить комментарий