Java SE 15 чыгаруу

Алты ай иштеп чыккандан кийин, Oracle бошотулду платформа JavaSE 15 (Java Platform, Standard Edition 15), ачык булактуу OpenJDK долбоору маалымдама ишке ашыруу катары колдонулат. Java SE 15 Java платформасынын мурунку релиздери менен артка шайкештикти сактайт; мурда жазылган бардык Java долбоорлору жаңы версияда ишке киргизилгенде эч кандай өзгөрүүсүз иштейт. Орнотууга даяр Java SE 15 түзүмдөрү (JDK, JRE жана Server JRE) даяр Linux (x86_64), Windows жана macOS үчүн. OpenJDK долбоору тарабынан иштелип чыккан маалымдама ишке ашыруу Java 15 GPLv2 лицензиясы боюнча толук ачык булак болуп саналат, GNU ClassPath бөтөнчөлөрү коммерциялык өнүмдөр менен динамикалык байланышты камсыз кылат.

Java SE 15 жалпы колдоо чыгаруу катары классификацияланган жана кийинки релизге чейин жаңыртууларды ала берет. Узак мөөнөттүү колдоо (LTS) бутагы Java SE 11 болушу керек, ал жаңыртууларды 2026-жылга чейин ала берет. Java 8дин мурунку LTS бутагы 2020-жылдын декабрына чейин колдоого алынат. Кийинки LTS релизи 2021-жылдын сентябрына пландаштырылган. Эске сала кетсек, Java 10 чыгарылгандан баштап, долбоор жаңы релиздерди түзүү үчүн кыскараак циклди билдирген жаңы иштеп чыгуу процессине өткөн. Жаңы функциялар азыр дайыма жаңыланып туруучу бир башкы бутакта иштелип чыккан, ал даяр өзгөртүүлөрдү камтыйт жана жаңы релиздерди турукташтыруу үчүн ар бир жарым жылда бир бутактан турат.

чейин инновациялар Java 15 алат белги:

  • Встроена поддержка алгоритма создания цифровой подписи EdDSA (Edwards-Curve Digital Signature Algorithm RFC 8032). Предложенная реализация EdDSA не зависит от аппаратных платформ, защищена от атак по сторонним каналам (обеспечено постоянное время всех вычислений) и по производительности опережает существующую реализацию ECDSA, написанную на языке Си, при том же уровне защиты. Например, EdDSA при использовании эллиптической кривой со 126-битным ключом демонстрирует производительность аналогичную ECDSA с эллиптической кривой secp256r1 и 128-битным ключом.
  • Кошулган экспериментальная поддержка запечатанных («sealed») классов и интерфейсов, которые не могут использоваться другими классами и интерфейсами для наследования, расширения или переопределения реализации. Запечатанные классы также предоставляют более декларативный способ ограничения использования суперкласса, чем модификаторы доступа, основанный на явном перечислении подклассов, разрешённых для расширения.

    package com.example.geometry;

    public sealed class Shape
    permits com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {…}

  • Кошулган поддержка скрытых классов, которые не могут быть использованы напрямую байткодом других классов. Ключевым назначением скрытых классов является использование во фреймворках, динамически генерирующих классы во время выполнения и использующих их косвенно, через чагылдыруу. Подобные классы обычно имеют ограниченный жизненный цикл, поэтому их поддержание для доступа из статически сгенерированных классов не оправдано и приведёт лишь к увеличению потребления памяти. Скрытые классы также позволяют обойтись без нестандартного API sun.misc.Unsafe::defineAnonymousClass, который намечен на удаление в будущем.
  • Стабилизирован и признан готовым для повсеместного использования сборщик мусора ZGC (Z Garbage Collector). ZGC работает в пассивном режиме, насколько это возможно минимизирует задержки из-за сборки мусора (время остановки при использовании ZGC не превышает 10 мс.) и может работать как с небольшими, так и с огромными кучами, размером от нескольких сотен мегабайт до многих терабайт.
  • Стабилизирован и признан готовым для повсеместного использования
    сборщик мусора Shenandoah, работающий с минимальными приостановками (Low-Pause-Time Garbage Collector). Shenandoah разработан компанией Red Hat и примечателен использованием алгоритма, сокращающего время остановок во время сборки мусора за счёт проведения чистки параллельно с выполнением Java-приложений. Размер вносимых сборщиком мусора задержек предсказуем и не зависит от размера кучи, т.е. для куч в 200 MB и 200 GB задержки будут идентичны (не выходят за пределы 50 мс и обычно укладываются в 10 мс);

  • Стабилизирована и введена в язык поддержка текст блоктору — новой формы строковых литералов, позволяющих включать в исходный код многострочные текстовые данные без применения в них экранирования символов и сохраняя исходное форматирования текста в блоке. Обрамление блока осуществляется тремя двойными кавычками.

    Например, вместо кода

    Сап html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 бул жерде!\" » +
    "\n\t" + " » +
    "\n" + " ";

    сиз белгилей аласыз:

    Сап html = """


    »Java 1\
    бул жерде!

    """;

  • Кайра иштетилген API Legacy DatagramSocket. Старые реализации java.net.DatagramSocket и java.net.MulticastSocket, заменены на современную реализацию, более простую для отладки и сопровождения, а также совместимую с виртуальными потоками, развиваемыми в рамках проекта турбасын. На случай возможного нарушения совместимости с существующим кодом старая реализация не удалена и может быть активирована при помощи опции jdk.net.usePlainDatagramSocketImpl.
  • Предложена вторая экспериментальная реализация үлгү дал келүү "instanceof" операторунда, ал дароо текшерилген мааниге жетүү үчүн локалдык өзгөрмөнү аныктоого мүмкүндүк берет. Мисалы, сиз дароо “if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” деп “String s = (String) obj” деп так аныктамасыз эле жаза аласыз.

    Ал эле:

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

    Эми сиз "Group group = (Group) obj" аныктамасы жок кыла аласыз:

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

  • Сунушталган вторая экспериментальная реализация ключевого слова «жазуу", класстарды аныктоо үчүн компакт форманы камсыздайт, бул сизге төмөнкү деңгээлдеги ар кандай ыкмаларды, мисалы, equals(), hashCode() жана toString() ачык-айкын аныктоодон качууга мүмкүндүк берет, эгерде маалыматтар жүрүм-туруму өзгөрбөгөн талааларда гана сакталат. Класс equals(), hashCode() жана toString() методдорунун стандарттуу реализацияларын колдонгондо, ал алардын ачык аныктамасы жок жасай алат:

    БанкТранзакциясынын ачык жазуусу (ЖергиликтүүКүн датасы,
    эки эселенген сумма
    Саптын сүрөттөлүшү) {}

    Бул декларация конструктор жана алуучунун методдоруна кошумча түрдө equals(), hashCode() жана toString() методдорунун ишке ашырууларын автоматтык түрдө кошот.

  • Сунушталган второй предварительный вариант API Foreign-Memory Access, позволяющий Java-приложениям безопасно и эффективно получить доступ к областям памяти, вне кучи Java, манипулируя новыми абстракциями MemorySegment, MemoryAddress и MemoryLayout.
  • Өчүрүлгөн и объявлена устаревшей техника оптмизации Biased Locking, применявшаяся в HotSpot JVM для сокращения накладных расходов из-за блокировок. Данная техника потеряла актуальность на системах с атомарными инструкциями, предоставляемыми современными CPU, и слишком трудоёмка для сопровождения из-за своей сложности.
  • Жарыяланган устаревшим механизм RMI Activation, который будет удалён в одном из следующих выпусков. Отмечается, что RMI Activation устарел, переведён в разряд опции ещё в Java 8 и почти не применяется в современной практике.
  • Жок кылынды JavaScript-движок керик, который был объявлен устаревшим в Java SE 11.
  • Өчүрүлдү порты для ОС Solaris и процессоров SPARC (Solaris/SPARC, Solaris/x64 и Linux/SPARC). Удаление указанных портов позволит сообществу ускорить разработку новых возможностей OpenJDK, не тратя время на поддержание особенностей, специфичных для Solaris и SPARC.

Source: opennet.ru

Комментарий кошуу