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

Sau sáu tháng phát triển, Oracle đã phát hành Java SE 20 (Nền tảng Java, Phiên bản tiêu chuẩn 20), sử dụng dự án nguồn mở OpenJDK làm triển khai tham chiếu. Ngoại trừ việc loại bỏ một số tính năng không dùng nữa, Java SE 20 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—hầu hết các dự án Java được viết trước đây sẽ vẫn hoạt động mà không cần sửa đổi khi chạy phiên bản mới. Các bản dựng có thể cài đặt của Java SE 20 (JDK, JRE và Server JRE) được chuẩn bị cho Linux (x86_64, AArch64), Windows (x86_64) và macOS (x86_64, AArch64). Được phát triển bởi dự án OpenJDK, triển khai tham chiếu Java 20 hoàn toàn mở theo giấy phép GPLv2 với các ngoại lệ GNU ClassPath để cho phép liên kết động tới các sản phẩm thương mại.

Java SE 20 đượ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 17, sẽ tiếp tục nhận được các bản cập nhật cho đến năm 2029. Hãy để chúng tôi nhắc bạn rằng bắt đầu từ việc phát hành Java 10, 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ác tính năng mới trong Java 20 bao gồm:

  • Предложена предварительная поддержка ограниченных значений (Scoped Values), позволяющих совместно использовать неизменяемые данные в потоках и эффективно обмениваться данными между дочерними потоками (значения наследуются). Scoped Values развиваются для замены механизма переменных локальных к потоку (thread-local variables) и более эффективны при использовании очень большого числа виртуальных потоков (тысячи и миллионы потоков). Главное отличие Scoped Values от переменных локальных к потоку в том, что первые записываются один раз, в дальнейшем не могут быть изменены и остаются доступны только на время выполнения потока. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(Request request, Response response) { var level = (request. isAuthorized()? ADMIN : GUEST); var user = new User(level); ScopedValue.where(CURRENT_USER, user) .run(() -> Application.handle(request, response)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) throw new InvalidUserException(); return new DBConnection(…); } }
  • Добавлена вторая предварительная реализация шаблонов записей (record pattern), расширяющая появившуюся в Java 16 возможность сопоставления с образцом средствами для разбора значений классов типа record. Например: record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = p.x(); int y = p.y(); System.out.println(x+y); } }
  • Добавлена четвёртая предварительная реализация сопоставления по шаблону в выражениях «switch», позволяющая в метках «case» использовать не точные значения, а гибкие шаблоны, охватывающие сразу серию значений, для которых ранее приходилось использовать громоздкие цепочки выражений «if…else». static String formatterPatternSwitch(Object obj) { return switch (obj) { case Integer i -> String.format(«int %d», i); case Long l -> String.format(«long %d», l); case Double d -> String.format(«double %f», d); case String s -> String.format(«String %s», s); default -> o.toString(); }; }
  • Добавлена вторая предварительная реализация API FFM (Foreign Function & Memory), позволяющего организовать взаимодействие Java-программ с внешними кодом и данными через вызов функций из внешних библиотек и доступ к памяти вне JVM.
  • Добавлена вторая предварительная реализация виртуальных потоков, представляющих собой легковесные потоки, значительно упрощающие написание и сопровождение высокопроизводительных многопоточных приложений.
  • Добавлен второй вариант экспериментального API для cтруктурированного параллелизма, упрощающего разработку многопоточных приложений за счёт обработки нескольких задач, выполняемых в разных потоках, как единого блока.
  • Добавлена пятая предварительная реализация API Vector, предоставляющего функции для векторных вычислений, которые выполняются с использованием векторных инструкций процессоров x86_64 и AArch64 и позволяют одновременно применить операции сразу к нескольким значениям (SIMD). В отличие от предоставляемых в JIT-компиляторе HotSpot возможностей по автовекторизации скалярных операций, новый API даёт возможность явно управлять векторизацией для параллельной обработки данных.

Nguồn: opennet.ru

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