Sau sáu tháng phát triển, Oracle đã phát hành Java SE 27 (Nền tảng Java, Phiên bản Chuẩn 27), sử dụng dự án mã 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 lỗi thời, Java SE 27 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 27 (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 SE 27 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 27 được xếp vào loại bản phát hành hỗ trợ thường xuyên, với các bản cập nhật được phát hành cho đến bản phát hành tiếp theo. Nhánh hỗ trợ dài hạn (LTS) sẽ là Java SE 25, Java SE 21 hoặc Java SE 17, với các bản cập nhật được phát hành lần lượt cho đến năm 2033, 2031 và 2029 (thường có sẵn cho đến tháng 9 năm 2030, 2028 và 2026). Hỗ trợ mở rộng cho nhánh Java SE 8 LTS sẽ tiếp tục cho đến năm 2030, và cho Java SE 11, cho đến năm 2032.
Các thay đổi trong Java SE 27 (1, 2, 3, 4) bao gồm:
- Theo mặc định, tất cả các môi trường đều sử dụng bộ thu gom rác G1 (Garbage-First), trước đây được sử dụng cho các hệ thống máy chủ. G1 được tối ưu hóa để sử dụng trên các hệ thống đa xử lý với dung lượng bộ nhớ lớn và để cân bằng độ trễ có thể dự đoán được với thông lượng cao. Trong quá trình hoạt động, G1 chia bộ nhớ thành nhiều vùng nhỏ và ưu tiên những vùng có nhiều đối tượng không được sử dụng và dữ liệu ít được truy cập hơn.
- JVM HotSpot sử dụng tiêu đề đối tượng nhỏ gọn theo mặc định. Trên hệ thống 64-bit, kích thước tiêu đề đã được giảm từ 96 xuống 64 bit, giúp giảm mức tiêu thụ bộ nhớ và tăng khả năng dữ liệu được lưu vào bộ nhớ cache của bộ xử lý. Trong các bài kiểm tra SPECjbb2015, mức tiêu thụ bộ nhớ giảm 22%, tải CPU giảm 8% và số lượng thao tác thu gom rác giảm 15%. Thời gian chạy thử nghiệm cho trình phân tích cú pháp JSON giảm 10%.
- Phiên bản TLS 1.3 bổ sung hỗ trợ cho các lược đồ thỏa thuận khóa lai kết hợp thuật toán ML-KEM chống lượng tử (CRYSTALS-Kyber) với các thuật toán đường cong elip ECDHE cổ điển: X25519MLKEM768 (ECDHE với đường cong X25519 + ML-KEM-768), SecP256r1MLKEM76 (ECDHE với đường cong secp256r1 + ML-KEM-768) và SecP384r1MLKEM1024 (ECDHE với đường cong secp384r1 + ML-KEM-1024). Thông tin này có trong API javax.net.ssl Các phương thức này được kích hoạt mặc định và không yêu cầu bất kỳ thay đổi nào trong ứng dụng để sử dụng.
- JDK Flight Recorder (JFR), một công cụ được sử dụng để giám sát hiệu năng, phân tích hiệu suất và chẩn đoán, hiện hỗ trợ việc làm sạch các đối số dòng lệnh, giá trị khởi tạo của các biến môi trường và các thuộc tính hệ thống trong thông tin chẩn đoán đã lưu. Thay đổi này ngăn chặn việc rò rỉ dữ liệu nhạy cảm được xử lý bởi tiến trình được phân tích hiệu suất, chẳng hạn như mã thông báo ủy quyền và khóa truy cập API được truyền qua các biến môi trường.
- Bản xem trước thứ ba của API Hằng số Lười biếng đã được triển khai để làm việc với các đối tượng chứa dữ liệu bất biến và được coi là hằng số trong JVM. Các tối ưu hóa hiệu suất tương tự như đối với các trường có từ khóa "final" được áp dụng cho các đối tượng đó. Không giống như "final", API mới tách biệt việc tạo giá trị hằng số khỏi việc khởi tạo chúng, đảm bảo rằng một giá trị chỉ có thể được khởi tạo một lần, giảm thời gian khởi động chương trình và cho phép tối ưu hóa gấp hằng số, trước đây chỉ được sử dụng trong mã nội bộ của JDK, được sử dụng trong mã người dùng. class Application { // Trước đây: // static final UserService USERS = new UserService(); // Bây giờ: static final StableValue USERS = StableValue.of(); public static UserService users() { return USERS.orElseSet(UserService::new); } }
- Công cụ khớp mẫu giới thiệu bản nháp thứ năm về khả năng sử dụng các kiểu dữ liệu nguyên thủy (int, byte, char và các kiểu dữ liệu cơ sở không phải đối tượng khác) trong tất cả các loại mẫu, trong toán tử instanceof và trong các khối switch. switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { … b … }
- Bản thảo thứ bảy của API Xử lý đồng thời có cấu trúc (Structured Concurrency API), 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 coi nhiều tác vụ chạy trên các luồng khác nhau như một đơn vị duy nhất, đã được phát hành để thử nghiệm.
- Phiên bản thử nghiệm thứ mười hai của API Vector đã được triển khai. API này cung cấp các hàm cho các phép tính vector được thực hiện bằng cách sử dụng các lệnh vector của bộ xử lý x86_64 và AArch64 và cho phép thực hiện các phép toán đồng thời trên nhiều giá trị (SIMD). Không giống như tính năng tự động vector hóa các phép toán vô hướng của trình biên dịch JIT HotSpot, API mới cho phép kiểm soát rõ ràng quá trình vector hóa để xử lý dữ liệu song song.
- Bản dự thảo thứ ba của API hiện đã có sẵn để mã hóa và giải mã các đối tượng chứa khóa mật mã, chứng chỉ và danh sách thu hồi chứng chỉ bằng định dạng PEM (Pivacy-Enhanced Mail).
Ngoài ra, chúng tôi rất vui mừng thông báo về việc phát hành bản cập nhật cho nền tảng JavaFX 27 để tạo các ứng dụng giao diện người dùng đồ họa. Việc phát hành máy ảo đa năng GraalVM 27, hỗ trợ chạy các ứng dụng bằng JavaScript (Node.js), Python, Ruby, R, bất kỳ ngôn ngữ JVM nào (Java, Scala, Clojure, Kotlin) và các ngôn ngữ có thể tạo mã bit LLVM (C, C++, Rust), cũng dự kiến sẽ diễn ra trong những giờ tới.
Nguồn: opennet.ru
