Publikimi i Java SE 14

Pas gjashtë muajsh zhvillimi, Oracle lëshuar platformë JavaSE 14 (Platforma Java, Standard Edition 14), projekti OpenJDK me burim të hapur përdoret si një zbatim referimi. Java SE 14 ruan përputhshmërinë e prapambetur me versionet e mëparshme të platformës Java; të gjitha projektet e shkruara më parë Java do të funksionojnë pa ndryshime kur të lançohen nën versionin e ri. Ndërtime të gatshme për instalim Java SE 14 (JDK, JRE dhe Server JRE) përgatitur për Linux (x86_64), Windows dhe macOS. Zbatimi i referencës i zhvilluar nga projekti OpenJDK Java 14 është plotësisht me burim të hapur nën licencën GPLv2, me përjashtime të GNU ClassPath që lejojnë lidhjen dinamike me produktet komerciale.

Java SE 14 klasifikohet si një version i përgjithshëm i mbështetjes dhe do të vazhdojë të marrë përditësime deri në versionin tjetër. Dega Long Term Support (LTS) duhet të jetë Java SE 11, e cila do të vazhdojë të marrë përditësime deri në vitin 2026. Dega e mëparshme LTS e Java 8 do të mbështetet deri në dhjetor 2020. Lëshimi tjetër i LTS është planifikuar për në shtator 2021. Ju kujtojmë se duke filluar me lëshimin e Java 10, projekti kaloi në një proces të ri zhvillimi, duke nënkuptuar një cikël më të shkurtër për formimin e versioneve të reja. Funksionaliteti i ri është zhvilluar tani në një degë kryesore të përditësuar vazhdimisht, e cila përfshin ndryshime të gatshme dhe nga e cila degët degëzohen çdo gjashtë muaj për të stabilizuar publikimet e reja.

Nga risitë Java 14 një mund të Mark:

  • Добавлена экспериментальная поддержка përputhje modeli në operatorin "instanceof", i cili ju lejon të përcaktoni menjëherë një ndryshore lokale për të hyrë në vlerën e kontrolluar. Për shembull, mund të shkruani menjëherë "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" pa përcaktuar në mënyrë eksplicite "String s = (String) obj".

    ishte:

    nëse (obj instance of Group) {
    Grupi grup = (Grupi)obj;
    var entries = group.getEntries();
    }

    Tani mund të bëni pa përkufizimin "Grupi i grupit = (Grupi) obj":

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

  • Добавлена экспериментальная поддержка нового ключевого слова «rekord", i cili ofron një formë kompakte për përcaktimin e klasave, duke ju lejuar të shmangni përcaktimin në mënyrë eksplicite të metodave të ndryshme të nivelit të ulët siç janë barabartë (), hashCode () dhe toString () në rastet kur të dhënat ruhen vetëm në fusha, sjellja e të cilave nuk ndryshon. Kur një klasë përdor implementime standarde të metodave equals(), hashCode() dhe toString(), ajo mund të bëjë pa përcaktimin e tyre të qartë:

    rekord publik i Transaksionit Bankar (Data Lokale,
    shuma e dyfishtë
    Përshkrimi i vargut) {}

    Kjo deklaratë do të shtojë automatikisht implementime të metodave equals(), hashCode() dhe toString() përveç metodave konstruktor dhe marrës.

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

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

    String html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 është këtu!\" » +
    "\n\t" + " » +
    "\n" + " ";

    ju mund të specifikoni:

    String html = """


    »Java 1\
    është këtu!

    """;

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

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

Burimi: opennet.ru

Shto një koment