Java SE 15 lage

Apre sis mwa nan devlopman, Oracle lage platfòm JavaSE 15 (Java Platform, Standard Edition 15), yo itilize pwojè OpenJDK sous louvri kòm yon aplikasyon referans. Java SE 15 kenbe konpatibilite bak ak degaje anvan yo nan platfòm Java a; tout pwojè Java ki te ekri deja pral travay san chanjman lè yo te lanse anba nouvo vèsyon an. Pare-pou-enstale Java SE 15 bati (JDK, JRE ak sèvè JRE) prepare pou Linux (x86_64), Windows ak macOS. Referans aplikasyon pwojè OpenJDK devlope Java 15 se sous totalman louvri anba lisans GPLv2, ak eksepsyon GNU ClassPath ki pèmèt lyen dinamik ak pwodwi komèsyal yo.

Java SE 15 klase kòm yon lage sipò jeneral epi li pral kontinye resevwa mizajou jiska pwochen lage a. Branch Sipò Alontèm (LTS) ta dwe Java SE 11, ki pral kontinye resevwa mizajou jiska 2026. Branch LTS anvan Java 8 la pral sipòte jiska desanm 2020. Pwochen piblikasyon LTS la pwograme pou septanm 2021. Se pou nou raple w ke kòmanse ak lage nan Java 10, pwojè a chanje nan yon nouvo pwosesis devlopman, ki vle di yon sik ki pi kout pou fòmasyon nan nouvo degaje. Nouvo fonksyonalite kounye a devlope nan yon sèl branch mèt toujou ap mete ajou, ki gen ladann chanjman ki pare yo epi ki soti nan ki branch yo branch chak sis mwa estabilize nouvo degaje.

Nan inovasyon Java 15 yon sèl kapab make:

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

    package com.example.geometry;

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

  • Te ajoute поддержка скрытых классов, которые не могут быть использованы напрямую байткодом других классов. Ключевым назначением скрытых классов является использование во фреймворках, динамически генерирующих классы во время выполнения и использующих их косвенно, через refleksyon. Подобные классы обычно имеют ограниченный жизненный цикл, поэтому их поддержание для доступа из статически сгенерированных классов не оправдано и приведёт лишь к увеличению потребления памяти. Скрытые классы также позволяют обойтись без нестандартного 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 мс);

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

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

    Chaîne html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 la!\" » +
    "\n\t" + " » +
    "\n" + " ";

    ou ka presize:

    String html = """


    »Java 1\
    se isit la!

    """;

  • Redesine API Legacy DatagramSocket. Старые реализации java.net.DatagramSocket и java.net.MulticastSocket, заменены на современную реализацию, более простую для отладки и сопровождения, а также совместимую с виртуальными потоками, развиваемыми в рамках проекта Tise. На случай возможного нарушения совместимости с существующим кодом старая реализация не удалена и может быть активирована при помощи опции jdk.net.usePlainDatagramSocketImpl.
  • Предложена вторая экспериментальная реализация matche modèl nan "instanceof" operatè a, ki pèmèt ou imedyatman defini yon varyab lokal jwenn aksè nan valè a tcheke. Pou egzanp, ou ka imedyatman ekri "si (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" san yo pa defini klèman "String s = (String) obj".

    Te:

    if (obj instanceof Group) {
    Gwoup gwoup = (Gwoup)obj;
    var antre = group.getEntries();
    }

    Koulye a, ou ka fè san yo pa definisyon "Gwoup group = (Group) obj":

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

  • Pwopoze вторая экспериментальная реализация ключевого слова «dosye", ki bay yon fòm kontra enfòmèl ant pou defini klas yo, ki pèmèt ou evite klèman defini divès kalite metòd ba nivo tankou equals(), hashCode() ak toString() nan ka kote done yo estoke sèlman nan jaden ki gen konpòtman pa chanje. Lè yon klas sèvi ak aplikasyon estanda equals(), hashCode() ak toString() metòd, li ka fè san yo pa definisyon eksplisit yo:

    dosye piblik Tranzaksyon Bank (LocalDate dat,
    doub kantite lajan
    deskripsyon chèn) {}

    Deklarasyon sa a pral otomatikman ajoute aplikasyon equals(), hashCode() ak toString() metòd anplis metòd konstrukteur ak getter.

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

Sous: opennet.ru

Add nouvo kòmantè