Phát hành nền tảng Java SE 22 và triển khai tham chiếu mở OpenJDK 22

Sau sáu tháng phát triển, Oracle đã phát hành nền tảng Java SE 22 (Java Platform, Standard Edition 22), sử dụng dự án mã nguồn mở OpenJDK làm tham chiếu. Ngoại trừ việc loại bỏ một số tính năng lỗi thời, Java SE 22 vẫn duy trì khả năng tương thích ngược với các phiên bản trước của nền tảng Java — hầu hết các dự án Java đã viết trước đây sẽ chạy mà không cần thay đổi khi chạy trên phiên bản mới. Các bản dựng sẵn sàng cài đặt của Java SE 22 (JDK, JRE và Server JRE) đã được chuẩn bị sẵn. Linux (x86_64, AArch64), Windows (x86_64) và macOS (x86_64, AArch64). Được phát triển bởi dự án OpenJDK, phiên bản tham chiếu Java 22 hoàn toàn là mã nguồn mở theo giấy phép GPLv2 với 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 22 đượ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 21 hoặc Java SE 17, sẽ nhận được các bản cập nhật tương ứng cho đến năm 2031 và 2029 (thường có sẵn cho đến năm 2028 và 2026). Hỗ trợ công khai cho nhánh LTS của Java SE 11 đã kết thúc vào tháng 2032 năm ngoái, nhưng hỗ trợ mở rộng sẽ tiếp tục cho đến năm 8. Hỗ trợ mở rộng cho nhánh LTS của Java SE 2030 sẽ tiếp tục cho đến 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 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 22 bao gồm:

  • Trình thu thập rác G1 bao gồm hỗ trợ ghim vùng, cho phép bạn tạm thời sửa vị trí của các đối tượng Java trong bộ nhớ để tránh chúng bị trình thu gom rác di chuyển và cho phép các tham chiếu đến các đối tượng này được chuyển một cách an toàn giữa Java và mã gốc. Ghim cho phép bạn giảm độ trễ và tránh vô hiệu hóa tính năng thu thập rác khi thực thi các vùng quan trọng của JNI (Giao diện gốc Java) bằng mã gốc (trong khi thực thi các phần này, JVM không được di chuyển các đối tượng quan trọng được liên kết với chúng để tránh các tình trạng tương tranh). Việc ghim sẽ loại bỏ các đối tượng quan trọng khỏi tầm nhìn của trình thu gom rác, việc này có thể tiếp tục dọn sạch các khu vực chưa được ghim.
  • Một tính năng sơ bộ đã được thêm vào để cho phép các biểu thức được chỉ định trong hàm tạo trước khi gọi super(...), được sử dụng để gọi rõ ràng hàm tạo của lớp cha từ hàm tạo của lớp kế thừa nếu các biểu thức đó không tham chiếu đến một thể hiện do hàm tạo tạo ra. class Outer { void hello() { System.out.println("Xin chào"); } lớp Bên trong { Nội() { xin chào(); siêu(); } } }
  • API FFM (Chức năng & bộ nhớ nước ngoài) đã được ổn định, cho phép tương tác giữa các chương trình Java với mã và dữ liệu bên ngoài bằng cách gọi các hàm từ thư viện bên ngoài và truy cập bộ nhớ bên ngoài JVM mà không cần dùng đến JNI (Giao diện gốc Java).
  • Đã bật hỗ trợ cho các biến không tên và khớp mẫu - thay vì các biến và mẫu không được sử dụng nhưng cần thiết khi gọi, giờ đây bạn có thể chỉ định ký tự “_”. // was String pageName = switch (page) { case GitHubIssuePage(var url, var content, var links, int issueNumber) -> “ISSUE #” + issueNumber; ... }; // bây giờ bạn có thể String pageName = switch (page) { case GitHubIssuePage(_, _, _, int issueNumber) -> “ISSUE #” + issueNumber; };
  • Việc triển khai sơ bộ API tệp lớp được đề xuất để phân tích cú pháp, tạo và chuyển đổi các tệp lớp Java. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(byte); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue(). startedWith("gỡ lỗi"))) { classBuilder.with(ce); } } });
  • Tiện ích java cung cấp khả năng chạy các chương trình Java, được cung cấp dưới dạng một số tệp mã hoặc thư viện lớp được biên dịch trước mà không cần biên dịch riêng các tệp này và không cần định cấu hình hệ thống xây dựng. Tính năng mới giúp chạy các chương trình trong đó mã của các lớp khác nhau được tách thành các tệp riêng biệt dễ dàng hơn. Prog.java: class Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Xin chào!"); } }

    Ví dụ: để chạy một chương trình bao gồm hai tệp "Prog.java" và "Helper.java", giờ đây chỉ cần chạy "java Prog.java", nó sẽ biên dịch lớp Prog, xác định tham chiếu đến lớp Trình trợ giúp, tìm và biên dịch tệp Helper.java và gọi phương thức chính.

  • Đã thêm cách triển khai sơ bộ thứ hai của Mẫu chuỗi, được triển khai cùng với các chuỗi ký tự và khối văn bản. Mẫu chuỗi cho phép bạn kết hợp văn bản với các biểu thức và biến được tính toán mà không cần sử dụng toán tử +. Việc thay thế các biểu thức được thực hiện bằng cách sử dụng các thay thế \{..} và các trình xử lý đặc biệt có thể được kết nối để kiểm tra tính chính xác của các giá trị được thay thế. Ví dụ: công cụ SQL kiểm tra các giá trị được thay thế trong mã SQL và trả về một đối tượng java.sql.Statement làm đầu ra, trong khi bộ xử lý JSON giám sát tính chính xác của các thay thế JSON và trả về một JsonNode. Truy vấn chuỗi = "CHỌN * TỪ Người p WHERE p." + thuộc tính + " = '" + giá trị + "'"; // là Truy vấn câu lệnh = SQL."""CHỌN * TỪ Người p WHERE p.\{property} = '\{value}'"""; // đã trở thành
  • Bản xem trước thứ bảy của API Vector đã được thêm vào, cung cấp các chức năng tính toán vectơ được thực hiện bằng hướng dẫn vectơ trên bộ xử lý x86_64 và AArch64, đồng thời cho phép áp dụng đồng thời các thao tác cho nhiều giá trị (SIMD). Không giống như các khả năng được cung cấp trong trình biên dịch HotSpot JIT để tự động vector hóa các phép toán vô hướng, API mới giúp kiểm soát rõ ràng việc vector hóa để xử lý dữ liệu song song.
  • Việc triển khai sơ bộ API Stream mở rộng đã được thêm vào để hỗ trợ xác định các hoạt động trung gian của riêng bạn, điều này có thể hữu ích trong trường hợp các hoạt động trung gian tích hợp sẵn hiện có không đủ để chuyển đổi dữ liệu mong muốn. Trình xử lý gốc được kết nối bằng thao tác trung gian mới Stream::gather(Gatherer), thao tác này xử lý các phần tử luồng bằng cách áp dụng trình xử lý do người dùng chỉ định cho chúng. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • Phiên bản thứ hai của API thử nghiệm cho Đồng thời có cấu trúc đã được đề xuất để thử nghiệm, giúp đơn giản hóa việc phát triển các ứng dụng đa luồng bằng cách xử lý nhiều tác vụ được thực thi trong các luồng khác nhau dưới dạng một khối duy nhất.
  • Đã thêm cách triển khai sơ bộ thứ hai của các lớp được khai báo ngầm và các phiên bản chưa được đặt tên của phương thức "chính", có thể loại bỏ các khai báo công khai/tĩnh, truyền một mảng đối số và các thực thể khác được liên kết với khai báo lớp. // là public class HelloWorld { public static void main(String[] args) { System.out.println("Xin chào thế giới!"); } } // bây giờ bạn có thể void main() { System.out.println("Xin chào, Thế giới!"); }
  • Đã thêm bản triển khai xem trước thứ hai của Giá trị phạm vi, cho phép chia sẻ dữ liệu bất biến giữa các luồng và dữ liệu được trao đổi hiệu quả giữa các luồng con (các giá trị được kế thừa). Giá trị phạm vi đang được phát triển để thay thế cơ chế biến thread-local và hiệu quả hơn khi sử dụng số lượng thread ảo rất lớn (hàng nghìn hoặc hàng triệu thread). Sự khác biệt chính giữa Giá trị phạm vi và biến cục bộ của luồng là biến trước đây được viết một lần, không thể thay đổi trong tương lai và chỉ khả dụng trong suốt thời gian thực thi của luồng.
  • Trình thu gom rác song song đã cải thiện hiệu suất khi làm việc với các mảng đối tượng lớn. Việc tối ưu hóa đã giúp một số thử nghiệm với mảng đối tượng lớn có thể giảm độ trễ trước khi bắt đầu tìm kiếm đối tượng xuống 20%.

Ngoài ra, bạn có thể lưu ý việc xuất bản bản cập nhật cho nền tảng tạo ứng dụng có giao diện đồ họa JavaFX 22.

Nguồn: opennet.ru

Mua dịch vụ lưu trữ đáng tin cậy cho các trang web có bảo vệ DDoS, máy chủ VPS VDS 🔥 Mua dịch vụ hosting website đáng tin cậy với bảo vệ DDoS, máy chủ VPS VDS | ProHoster