Java SE 15 sürümü

Altı aylık geliştirme sürecinin ardından Oracle yayınlandı bir platform Java SE15 (Java Platformu, Standard Edition 15), referans uygulaması olarak açık kaynaklı OpenJDK projesi kullanılmaktadır. Java SE 15, Java platformunun önceki sürümleriyle geriye dönük uyumluluğu korur; önceden yazılmış tüm Java projeleri, yeni sürüm altında başlatıldığında değişiklik olmadan çalışacaktır. Kuruluma hazır Java SE 15 yapıları (JDK, JRE ve Sunucu JRE) hazır Linux (x86_64), Windows ve macOS için. OpenJDK projesi tarafından geliştirilen referans uygulaması Java 15 Ticari ürünlerle dinamik bağlantıya izin veren GNU ClassPath istisnaları dışında, GPLv2 lisansı altında tamamen açık kaynaktır.

Java SE 15, genel destek sürümü olarak sınıflandırılmıştır ve bir sonraki sürüme kadar güncellemeleri almaya devam edecektir. Uzun Süreli Destek (LTS) dalı, 11 yılına kadar güncelleme almaya devam edecek olan Java SE 2026 olmalıdır. Java 8'in önceki LTS dalı Aralık 2020'ye kadar desteklenecektir. Bir sonraki LTS sürümünün Eylül 2021'de yayınlanması planlanıyor. Java 10'un çıkışıyla birlikte projenin yeni bir geliştirme sürecine geçtiğini, bunun da yeni sürümlerin oluşumu için daha kısa bir döngü anlamına geldiğini hatırlatalım. Yeni işlevsellik artık sürekli olarak güncellenen, hazır değişiklikleri içeren ve yeni sürümleri dengelemek için her altı ayda bir dallara ayrılan ana dalda geliştirilmektedir.

Of yenilikler Java 15 kimse yapamaz işaret:

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

    package com.example.geometry;

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

  • Katma поддержка скрытых классов, которые не могут быть использованы напрямую байткодом других классов. Ключевым назначением скрытых классов является использование во фреймворках, динамически генерирующих классы во время выполнения и использующих их косвенно, через отражение. Подобные классы обычно имеют ограниченный жизненный цикл, поэтому их поддержание для доступа из статически сгенерированных классов не оправдано и приведёт лишь к увеличению потребления памяти. Скрытые классы также позволяют обойтись без нестандартного 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 задержки будут идентичны (dışarı çıkma за пределы 50 мс и обычно укладываются в 10 мс);

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

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

    Dize HTML = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 geldi!\" » +
    "\n\t" + " » +
    "\n" + " ";

    şunları belirtebilirsiniz:

    Dize HTML = """


    »Java 1\
    burada!

    """;

  • Yeniden tasarlandı API Legacy DatagramSocket. Старые реализации java.net.DatagramSocket и java.net.MulticastSocket, заменены на современную реализацию, более простую для отладки и сопровождения, а также совместимую с виртуальными потоками, развиваемыми в рамках проекта Loom. На случай возможного нарушения совместимости с существующим кодом старая реализация не удалена и может быть активирована при помощи опции jdk.net.usePlainDatagramSocketImpl.
  • Предложена вторая экспериментальная реализация desen eşleştirme kontrol edilen değere erişmek için hemen bir yerel değişken tanımlamanıza olanak tanıyan "instanceof" operatöründe. Örneğin, “String s = (String) obj” ifadesini açıkça tanımlamadan hemen “if (obj exampleof String s && s.length() > 5) {.. s.contains(..) ..}” yazabilirsiniz.

    Oldu:

    if (obj örneğinin Grubu) {
    Grup grubu = (Grup)obj;
    var girişleri = group.getEntries();
    }

    Artık “Grup grubu = (Grup) obj” tanımı olmadan da yapabilirsiniz:

    if (obj Grup grubunun örneği) {
    var girişleri = group.getEntries();
    }

  • Önerildi вторая экспериментальная реализация ключевого слова «kayıt", verilerin yalnızca davranışı değişmeyen alanlarda depolandığı durumlarda equals(), hashCode() ve toString() gibi çeşitli düşük seviyeli yöntemleri açıkça tanımlamaktan kaçınmanıza olanak tanıyarak, sınıfları tanımlamak için kompakt bir form sağlar. Bir sınıf equals(), hashCode() ve toString() yöntemlerinin standart uygulamalarını kullandığında, bunların açık tanımları olmadan da bunu yapabilir:

    genel kayıt BankTransaction(LocalDate tarihi,
    çift ​​miktar
    Dize açıklaması) {}

    Bu bildirim, yapıcı ve alıcı yöntemlerine ek olarak equals(), hashCode() ve toString() yöntemlerinin uygulamalarını otomatik olarak ekleyecektir.

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

Kaynak: opennet.ru

Yorum ekle