Java SE 15 Verëffentlechung

No sechs Méint Entwécklung, Oracle entlooss Plattform JavaSE 15 (Java Plattform, Standard Edition 15), den Open-Source OpenJDK Projet gëtt als Referenzimplementatioun benotzt. Java SE 15 hält Réckkompatibilitéit mat fréiere Verëffentlechungen vun der Java Plattform; all virdru geschriwwe Java Projete funktionnéieren ouni Ännerungen wann se ënner der neier Versioun lancéiert ginn. Ready-to-install Java SE 15 Builds (JDK, JRE a Server JRE) virbereet fir Linux (x86_64), Windows a macOS. Referenz Implementatioun entwéckelt vum OpenJDK Projet Java 15 ass voll Open Source ënner der GPLv2 Lizenz, mat GNU ClassPath Ausnahmen déi dynamesch Verbindung mat kommerziellen Produkter erlaben.

Java SE 15 ass als allgemeng Support Verëffentlechung klasséiert a wäert weider Updates bis déi nächst Verëffentlechung kréien. D'Long Term Support (LTS) Branche soll Java SE 11 sinn, déi weider Updates bis 2026 kréien. Déi viregt LTS Filial vu Java 8 gëtt bis Dezember 2020 ënnerstëtzt. Déi nächst LTS Verëffentlechung ass geplangt fir September 2021. Loosst eis Iech drun erënneren datt ugefaang mat der Verëffentlechung vu Java 10, de Projet op en neien Entwécklungsprozess gewiesselt ass, wat e méi kuerzen Zyklus fir d'Bildung vun neie Verëffentlechungen implizéiert. Nei Funktionalitéit ass elo an enger stänneg aktualiséierter Master-Branche entwéckelt, déi fäerdeg Ännerunge enthält an aus deenen d'Branchen all sechs Méint verzweifelt ginn fir nei Verëffentlechungen ze stabiliséieren.

Vun Innovatiounen Java 15 kënnen Markéieren:

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

    package com.example.geometry;

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

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

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

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

    String html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 ass hei!\" » +
    "\n\t" + " » +
    "\n" + " ";

    Dir kënnt uginn:

    String html = """


    »Java 1\
    ass hei!

    """;

  • Ëmgeschafft API Legacy DatagramSocket. Старые реализации java.net.DatagramSocket и java.net.MulticastSocket, заменены на современную реализацию, более простую для отладки и сопровождения, а также совместимую с виртуальными потоками, развиваемыми в рамках проекта Loom. На случай возможного нарушения совместимости с существующим кодом старая реализация не удалена и может быть активирована при помощи опции jdk.net.usePlainDatagramSocketImpl.
  • Предложена вторая экспериментальная реализация Muster passend am "Instanceof" Bedreiwer, deen Iech erlaabt direkt eng lokal Variabel ze definéieren fir op de kontrolléierte Wäert ze kommen. Zum Beispill kënnt Dir direkt "wann (obj instanceof String s && s.length () > 5) {.. s.contains(..) ..}" schreiwen ouni explizit "String s = (String) obj" ze definéieren.

    Et war:

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

    Elo kënnt Dir ouni d'Definitioun "Grupp Grupp = (Grupp) obj" maachen:

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

  • proposéiert вторая экспериментальная реализация ключевого слова «Rekord", déi eng kompakt Form ubitt fir Klassen ze definéieren, wat Iech erlaabt explizit verschidde Low-Level Methoden ze vermeiden wéi egal (), hashCode () an toString () a Fäll wou Daten nëmmen a Felder gespäichert sinn, deenen hir Verhalen net ännert. Wann eng Klass Standardimplementatioune vun de equals (), hashCode () an toString () Methoden benotzt, kann et ouni hir explizit Definitioun maachen:

    ëffentleche Rekord BankTransaktioun (LocalDate Datum,
    duebel Betrag
    String Beschreiwung) {}

    Dës Deklaratioun wäert automatesch Implementatioune vun den equals (), hashCode () an toString () Methoden zousätzlech zu de Konstruktor- a Getter Methoden addéieren.

  • proposéiert второй предварительный вариант API Foreign-Memory Access, позволяющий Java-приложениям безопасно и эффективно получить доступ к областям памяти, вне кучи Java, манипулируя новыми абстракциями MemorySegment, MemoryAddress и MemoryLayout.
  • Behënnert и объявлена устаревшей техника оптмизации Biased Locking, применявшаяся в HotSpot JVM для сокращения накладных расходов из-за блокировок. Данная техника потеряла актуальность на системах с атомарными инструкциями, предоставляемыми современными CPU, и слишком трудоёмка для сопровождения из-за своей сложности.
  • ugekënnegt устаревшим механизм RMI Activation, который будет удалён в одном из следующих выпусков. Отмечается, что RMI Activation устарел, переведён в разряд опции ещё в Java 8 и почти не применяется в современной практике.
  • Geläscht JavaScript-движок rhino, который был объявлен устаревшим в Java SE 11.
  • Geläscht порты для ОС Solaris и процессоров SPARC (Solaris/SPARC, Solaris/x64 и Linux/SPARC). Удаление указанных портов позволит сообществу ускорить разработку новых возможностей OpenJDK, не тратя время на поддержание особенностей, специфичных для Solaris и SPARC.

Source: opennet.ru

Setzt e Commentaire