انتشار جاوا SE 14

پس از شش ماه توسعه، اوراکل منتشر شد سکو جاوا SE 14 (پلتفرم جاوا، نسخه استاندارد 14)، پروژه منبع باز OpenJDK به عنوان پیاده سازی مرجع استفاده می شود. Java SE 14 سازگاری با نسخه های قبلی پلتفرم جاوا را حفظ می کند؛ تمام پروژه های جاوا که قبلاً نوشته شده بودند، در صورت اجرا تحت نسخه جدید بدون تغییر کار می کنند. ساخت‌های آماده برای نصب جاوا SE 14 (JDK، JRE و سرور JRE) آماده شده برای لینوکس (x86_64)، ویندوز و macOS. پیاده سازی مرجع توسعه یافته توسط پروژه OpenJDK جاوا 14 تحت مجوز GPLv2 کاملاً منبع باز است، با استثناهای GNU ClassPath که امکان پیوند پویا با محصولات تجاری را فراهم می کند.

Java SE 14 به عنوان نسخه پشتیبانی عمومی طبقه بندی می شود و تا نسخه بعدی به دریافت به روز رسانی ها ادامه خواهد داد. شاخه پشتیبانی طولانی مدت (LTS) باید جاوا SE 11 باشد که تا سال 2026 به دریافت به روز رسانی ادامه خواهد داد. شاخه قبلی LTS جاوا 8 تا دسامبر 2020 پشتیبانی می شود. نسخه بعدی LTS برای سپتامبر 2021 برنامه ریزی شده است. یادآوری می کنیم که با شروع انتشار جاوا 10، این پروژه به یک فرآیند توسعه جدید تبدیل شد که به معنای چرخه کوتاه تری برای شکل گیری نسخه های جدید است. عملکرد جدید اکنون در یک شاخه اصلی که دائماً به‌روز می‌شود، توسعه می‌یابد که شامل تغییرات آماده است و شاخه‌ها هر شش ماه یک‌بار برای تثبیت نسخه‌های جدید منشعب می‌شوند.

از نوآوری ها جاوا 14 می توان علامت:

  • Добавлена экспериментальная поддержка تطبیق الگو در عملگر "instanceof"، که به شما امکان می دهد بلافاصله یک متغیر محلی برای دسترسی به مقدار بررسی شده تعریف کنید. برای مثال، می‌توانید بلافاصله بنویسید: «if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}» بدون اینکه صریحاً «String s = (String) obj» را تعریف کنید.

    این بود:

    if (obj instanceof Group) {
    گروه گروه = (گروه)obj;
    var entries = group.getEntries();
    }

    اکنون می توانید بدون تعریف "گروه گروه = (گروه) obj" انجام دهید:

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

  • Добавлена экспериментальная поддержка нового ключевого слова «رکورد"، که فرم فشرده ای را برای تعریف کلاس ها فراهم می کند و به شما امکان می دهد از تعریف صریح متدهای سطح پایین مختلف مانند ()quals()، hashCode() و ()toString در مواردی که داده ها فقط در فیلدهایی ذخیره می شوند که رفتار آنها تغییر نمی کند، اجتناب کنید. هنگامی که یک کلاس از پیاده سازی های استاندارد متدهای ()quals()، hashCode() و toString() استفاده می کند، می تواند بدون تعریف صریح آنها این کار را انجام دهد:

    سابقه عمومی تراکنش بانکی (تاریخ محلی،
    مقدار دو برابر
    شرح رشته) {}

    این اعلان به طور خودکار پیاده سازی های متدهای ()quals()، hashCode() و toString() را علاوه بر متدهای سازنده و دریافت کننده اضافه می کند.

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

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

    رشته html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"جاوا 1 اینجاست!\" » +
    "\n\t" + " » +
    "\n" + " "؛

    می توانید مشخص کنید:

    رشته html = """


    »جاوا 1\
    اینجاست!

    """؛

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

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

منبع: opennet.ru

اضافه کردن نظر