Java SE 14 -julkaisu

Kuuden kuukauden kehitystyön jälkeen Oracle julkaisi alusta JavaSE 14 (Java Platform, Standard Edition 14), avoimen lähdekoodin OpenJDK-projektia käytetään referenssitoteutuksena. Java SE 14 säilyttää taaksepäin yhteensopivuuden Java-alustan aikaisempien julkaisujen kanssa; kaikki aiemmin kirjoitetut Java-projektit toimivat ilman muutoksia, kun ne julkaistaan ​​uudessa versiossa. Asennettavat Java SE 14 -koontiversiot (JDK, JRE ja Server JRE) valmis Linuxille (x86_64), Windowsille ja macOS:lle. OpenJDK-projektin kehittämä referenssitoteutus Java 14 on täysin avoimen lähdekoodin GPLv2-lisenssin alainen GNU ClassPath-poikkeuksilla, jotka mahdollistavat dynaamisen linkityksen kaupallisiin tuotteisiin.

Java SE 14 on luokiteltu yleiseksi tukijulkaisuksi, ja se saa päivityksiä seuraavaan julkaisuun asti. Long Term Support (LTS) -haara pitäisi olla Java SE 11, joka saa jatkossakin päivityksiä vuoteen 2026 asti. Java 8:n aiempaa LTS-haaraa tuetaan joulukuuhun 2020 asti. Seuraava LTS-julkaisu on suunniteltu syyskuulle 2021. Muistutetaan, että Java 10:n julkaisusta lähtien projekti siirtyi uuteen kehitysprosessiin, mikä merkitsi lyhyempää sykliä uusien julkaisujen muodostukselle. Uusi toiminnallisuus on nyt kehitetty yhteen jatkuvasti päivitettävään päähaaraan, joka sisältää valmiita muutoksia ja josta haarat haarautuvat kuuden kuukauden välein uusien julkaisujen vakauttamiseksi.

Ja innovaatioita Java 14 voidaan muodostaa merkki:

  • Добавлена экспериментальная поддержка kuvion sovitus "instanceof"-operaattorissa, jonka avulla voit määrittää välittömästi paikallisen muuttujan, jolla pääset tarkastettuun arvoon. Voit esimerkiksi kirjoittaa välittömästi "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" määrittelemättä nimenomaisesti "String s = (String) obj".

    Se oli:

    if (ryhmän objektiinstanssi) {
    Ryhmäryhmä = (Ryhmä)obj;
    var merkinnät = group.getEntries();
    }

    Nyt voit tehdä ilman määritelmää "Group group = (Group) obj":

    if (Obj instanceof Group group) {
    var merkinnät = group.getEntries();
    }

  • Добавлена экспериментальная поддержка нового ключевого слова «ennätys", joka tarjoaa kompaktin muodon luokkien määrittelyyn, jolloin voit välttää erilaisten matalan tason menetelmien, kuten equals(), hashCode() ja toString() määrittelyn, jos tietoja on tallennettu vain kenttiin, joiden käyttäytyminen ei muutu. Kun luokka käyttää menetelmien equals(), hashCode() ja toString() vakiototeutuksia, se voi pärjätä ilman niiden nimenomaista määritelmää:

    julkinen tietue BankTransaction(LocalDate päivämäärä,
    kaksinkertainen määrä
    Merkkijonon kuvaus) {}

    Tämä ilmoitus lisää automaattisesti menetelmien equals(), hashCode() ja toString() toteutukset konstruktori- ja getter-menetelmien lisäksi.

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

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

    merkkijono html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 on täällä!\" » +
    "\n\t" + " » +
    "\n" + " ";

    voit määrittää:

    merkkijono html = """


    »Java 1\
    on täällä!

    """;

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

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

Lähde: opennet.ru

Lisää kommentti