Bản phát hành Java SE 15

Sau sáu tháng phát triển, Oracle phát hành nền tảng JavaSE 15 (Nền tảng Java, Phiên bản tiêu chuẩn 15), dự án OpenJDK nguồn mở được sử dụng làm triển khai tham chiếu. Java SE 15 duy trì khả năng tương thích ngược với các bản phát hành trước của nền tảng Java; tất cả các dự án Java được viết trước đó sẽ hoạt động mà không có thay đổi khi chạy trong phiên bản mới. Các bản dựng Java SE 15 sẵn sàng cài đặt (JDK, JRE và Server JRE) chuẩn bị dành cho Linux (x86_64), Windows và macOS. Triển khai tham khảo được phát triển bởi dự án OpenJDK Java 15 là nguồn mở hoàn toàn theo giấy phép GPLv2, với các ngoại lệ GNU ClassPath cho phép liên kết động với các sản phẩm thương mại.

Java SE 15 được phân loại là bản phát hành hỗ trợ thường xuyên và sẽ tiếp tục nhận được các bản cập nhật cho đến bản phát hành tiếp theo. Nhánh Hỗ trợ dài hạn (LTS) phải là Java SE 11, nhánh này sẽ tiếp tục nhận được các bản cập nhật cho đến năm 2026. Nhánh LTS trước đây của Java 8 sẽ được hỗ trợ cho đến tháng 2020 năm 2021. Bản phát hành LTS tiếp theo dự kiến ​​​​vào tháng 10 năm XNUMX. Hãy để chúng tôi nhắc bạn rằng bắt đầu từ việc phát hành Java XNUMX, dự án đã chuyển sang một quy trình phát triển mới, ngụ ý rằng chu kỳ hình thành các bản phát hành mới sẽ ngắn hơn. Chức năng mới hiện được phát triển trong một nhánh chính được cập nhật liên tục, bao gồm các thay đổi được thực hiện sẵn và từ đó các nhánh được phân nhánh sáu tháng một lần để ổn định các bản phát hành mới.

Của đổi mới Java 15 ai có thể dấu:

  • Được xây dựng trong поддержка алгоритма создания цифровой подписи EdDSA (Edwards-Curve Digital Signature Algorithm RFC 8032). Предложенная реализация EdDSA не зависит от аппаратных платформ, защищена от атак по сторонним каналам (обеспечено постоянное время всех вычислений) и по производительности опережает существующую реализацию ECDSA, написанную на языке Си, при том же уровне защиты. Например, EdDSA при использовании эллиптической кривой со 126-битным ключом демонстрирует производительность аналогичную ECDSA с эллиптической кривой secp256r1 и 128-битным ключом.
  • Thêm экспериментальная поддержка запечатанных («sealed») классов и интерфейсов, которые не могут использоваться другими классами и интерфейсами для наследования, расширения или переопределения реализации. Запечатанные классы также предоставляют более декларативный способ ограничения использования суперкласса, чем модификаторы доступа, основанный на явном перечислении подклассов, разрешённых для расширения.

    package com.example.geometry;

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

  • Thêm поддержка скрытых классов, которые не могут быть использованы напрямую байткодом других классов. Ключевым назначением скрытых классов является использование во фреймворках, динамически генерирующих классы во время выполнения и использующих их косвенно, через sự phản chiếu. Подобные классы обычно имеют ограниченный жизненный цикл, поэтому их поддержание для доступа из статически сгенерированных классов не оправдано и приведёт лишь к увеличению потребления памяти. Скрытые классы также позволяют обойтись без нестандартного 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 задержки будут идентичны (đừng ra ngoài за пределы 50 мс и обычно укладываются в 10 мс);

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

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

    Chuỗi html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 đã có mặt!\" » +
    "\n\t" + " » +
    "\n" + " ";

    bạn có thể chỉ định:

    Chuỗi html = """


    »Java 1\
    ở đây!

    """;

  • Làm lại API Legacy DatagramSocket. Старые реализации java.net.DatagramSocket и java.net.MulticastSocket, заменены на современную реализацию, более простую для отладки и сопровождения, а также совместимую с виртуальными потоками, развиваемыми в рамках проекта Khung dệt. На случай возможного нарушения совместимости с существующим кодом старая реализация не удалена и может быть активирована при помощи опции jdk.net.usePlainDatagramSocketImpl.
  • Предложена вторая экспериментальная реализация khớp mẫu trong toán tử “instanceof”, cho phép bạn xác định ngay một biến cục bộ để truy cập giá trị đã kiểm tra. Ví dụ: bạn có thể viết ngay “if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” mà không cần xác định rõ ràng “String s = (String) obj”.

    Đó là:

    if (nhóm obj instanceof) {
    Nhóm nhóm = (Nhóm)obj;
    var entry = group.getEntries();
    }

    Bây giờ bạn có thể thực hiện mà không cần định nghĩa “Nhóm nhóm = (Nhóm) obj”:

    if (obj instanceof Nhóm nhóm) {
    var entry = group.getEntries();
    }

  • Đề xuất вторая экспериментальная реализация ключевого слова «ghi", cung cấp một biểu mẫu nhỏ gọn để xác định các lớp, cho phép bạn tránh việc xác định rõ ràng nhiều phương thức cấp thấp khác nhau như Equals(), hashCode() và toString() trong trường hợp dữ liệu chỉ được lưu trữ trong các trường có hành vi không thay đổi. Khi một lớp sử dụng cách triển khai tiêu chuẩn của các phương thức Equals(), hashCode() và toString(), nó có thể thực hiện mà không cần định nghĩa rõ ràng:

    hồ sơ công khai BankTransaction(LocalDate date,
    số tiền gấp đôi
    Mô tả chuỗi) {}

    Tuyên bố này sẽ tự động thêm việc triển khai các phương thức bằng(), hashCode() và toString() bên cạnh các phương thức khởi tạo và getter.

  • Đề xuất второй предварительный вариант API Foreign-Memory Access, позволяющий Java-приложениям безопасно и эффективно получить доступ к областям памяти, вне кучи Java, манипулируя новыми абстракциями MemorySegment, MemoryAddress и MemoryLayout.
  • Tàn tật и объявлена устаревшей техника оптмизации Biased Locking, применявшаяся в HotSpot JVM для сокращения накладных расходов из-за блокировок. Данная техника потеряла актуальность на системах с атомарными инструкциями, предоставляемыми современными CPU, и слишком трудоёмка для сопровождения из-за своей сложности.
  • Công bố устаревшим механизм RMI Activation, который будет удалён в одном из следующих выпусков. Отмечается, что RMI Activation устарел, переведён в разряд опции ещё в Java 8 и почти не применяется в современной практике.
  • Đã xóa JavaScript-движок tê giác, который был объявлен устаревшим в Java SE 11.
  • Loại bỏ порты для ОС Solaris и процессоров SPARC (Solaris/SPARC, Solaris/x64 и Linux/SPARC). Удаление указанных портов позволит сообществу ускорить разработку новых возможностей OpenJDK, не тратя время на поддержание особенностей, специфичных для Solaris и SPARC.

Nguồn: opennet.ru

Thêm một lời nhận xét