Công nghệ

Java 27 loại bỏ GC đóng băng ứng dụng và giảm bộ nhớ đối tượng 33%

Adrian Kessler
Thêm chúng tôi trên Google

Java 27 ra mắt với hai thay đổi sẽ âm thầm đến với mọi JVM đang chạy ở bất kỳ đâu. Bộ thu gom rác G1 giờ là mặc định trên mọi môi trường chạy Java — chấm dứt sự tồn tại của bộ thu gom rác Serial gây dừng toàn bộ trên phần cứng hạn chế — và phần tiêu đề đối tượng đã được thu gọn từ 96 bit xuống còn 64 bit, cắt giảm một phần ba chi phí cho bất kỳ ứng dụng nào tạo ra số lượng lớn đối tượng.

Bộ thu gom rác Serial là GC lâu đời nhất của Java: đơn giản, dễ đoán, và tàn bạo. Khi nó chạy, nó đóng băng toàn bộ ứng dụng cho đến khi bộ nhớ heap được dọn sạch. Trên các máy chủ bộ nhớ lớn, nhiều CPU, sự đánh đổi đó trở nên không thể chấp nhận từ nhiều năm trước — G1 đã thay thế Serial làm mặc định cho máy chủ từ Java 9. Các môi trường hạn chế tiếp tục chạy Serial cho đến Java 26: máy một CPU, VM đám mây nhỏ, hệ thống nhúng bộ nhớ thấp. Mặc định đó kết thúc với Java 27.

G1 chia heap thành các vùng nhỏ và thu gom chúng theo từng bước, ưu tiên các phần có nhiều rác nhất trước — do đó có tên Garbage-First. Các khoảng dừng vẫn tồn tại, nhưng chúng ngắn hơn và dễ đoán hơn so với một lần thu gom toàn bộ của Serial. Oracle tuyên bố rằng G1 hiện cạnh tranh với Serial ở mọi kích thước heap. Đối với các nhà phát triển triển khai ứng dụng trên các phiên bản đám mây rẻ nhất — một CPU, một gigabyte RAM — Java 27 loại bỏ một rào cản mà họ đã phải sống chung trong nhiều năm.

Thay đổi tiêu đề đối tượng gọn nhẹ là một nửa còn lại của bản phát hành này. Các đối tượng Java mang siêu dữ liệu — thông tin loại, mã băm, trạng thái khóa — được lưu trong một tiêu đề gắn liền với mỗi đối tượng. Định dạng cũ sử dụng 96 bit. Java 27 nén xuống còn 64 bit, giảm 33% cho mỗi đối tượng. Đối với các ứng dụng tạo ra hàng triệu đối tượng — hàng đợi tin nhắn, sổ cái tài chính, microservices hướng sự kiện — hiệu quả tích lũy là đáng kể: heap dày đặc hơn, sử dụng bộ nhớ cache CPU tốt hơn, ít chu kỳ thu gom hơn.

Cả hai thay đổi đều có những lưu ý. Các ứng dụng được tinh chỉnh riêng cho hành vi Serial GC có thể thấy sự khác biệt về thời gian không mong muốn sau khi nâng cấp. G1 sử dụng nhiều bộ nhớ hơn cho việc ghi chép so với Serial, điều này quan trọng trong các môi trường có ngân sách bộ nhớ thực sự hạn hẹp — mặc dù thử nghiệm của Oracle chỉ ra rằng sự đánh đổi về thông lượng là không đáng kể đối với hầu hết các khối lượng công việc. Các đội phát triển triển khai Java 27 trên các hệ thống hạn chế nên kiểm tra với các mặc định mới trước khi phát hành. Quá trình chuyển đổi là tự động, nhưng không phải là vô hình.

Java 27 cũng bổ sung trao đổi khóa lai hậu lượng tử cho TLS 1.3, triển khai thuật toán ML-KEM bên cạnh trao đổi khóa đường cong elliptic X25519 hiện có. Các kết nối TLS được thương lượng ngày hôm nay có thể, về lý thuyết, bị thu thập và giải mã sau này bởi một máy tính lượng tử trong tương lai. Trao đổi khóa lai bảo vệ chống lại điều đó bằng cách yêu cầu kẻ tấn công phải phá vỡ cả thuật toán cổ điển và hậu lượng tử cùng một lúc — một bổ sung có ý nghĩa cho bất kỳ dịch vụ Java nào xử lý dữ liệu nhạy cảm.

Java 27 được phát hành vào ngày 15 tháng 9 năm 2026, theo chu kỳ sáu tháng của nền tảng. Đồng thời ngôn ngữ cấu trúc và hằng số lười tiếp tục là các tính năng xem trước trong phiên bản này. Bản phát hành hỗ trợ dài hạn tiếp theo trong chuỗi Java dự kiến vào năm 2027.

Thẻ: , , , , ,

Thêm chúng tôi trên Google

Thảo luận

Có 0 bình luận.