Still Soft
Trang chủ › Công Nghệ Mới

Java 27 ra mắt: G1 mặc định, header gọn và TLS hậu lượng tử

Ban biên tập Still Soft ·
Java 27 ra mắt: G1 mặc định, header gọn và TLS hậu lượng tử

Java 27 (JDK 27) được công bố bản phát hành chính thức ngày 15/9/2026, gồm 9 JEP. Ba thay đổi đáng chú ý nhất với đội vận hành là: G1 trở thành bộ thu gom rác mặc định ở mọi môi trường, compact object headers được bật sẵn, và TLS 1.3 dùng cơ chế trao đổi khóa lai có thành phần chống máy tính lượng tử. Đây là bản ngắn hạn, không phải LTS, nên phần lớn doanh nghiệp đang chạy JDK 21 hoặc 25 chỉ cần thử nghiệm chứ chưa cần chuyển production.

Bài này tóm tắt từng JEP theo góc nhìn của một nhóm phát triển phần mềm tại Việt Nam: cái gì ảnh hưởng tới máy chủ đang chạy, cái gì chỉ là bản xem trước để học, và nên lập kế hoạch thử nghiệm ra sao.

Danh sách 9 JEP trong JDK 27

Theo bài tổng hợp của InfoWorld về các tính năng mới của Java 27, đăng ngày 15/9/2026, bản phát hành gồm các JEP sau:

JEPNội dungTrạng thái
523G1 là bộ thu gom rác mặc địnhChính thức
527Trao đổi khóa lai hậu lượng tử cho TLS 1.3Chính thức
531Lazy constantsPreview lần 3
532Kiểu nguyên thủy trong pattern, instanceof, switchPreview lần 5
533Structured concurrencyPreview lần 7
534Compact object headers mặc địnhChính thức
536Ẩn dữ liệu nhạy cảm trong bản ghi JFRChính thức
537Vector APIIncubator lần 12
538Mã hóa PEM cho đối tượng mật mãPreview API

Bản tiền nhiệm JDK 26 ra ngày 17/3/2026, cũng là bản ngắn hạn. Nhịp sáu tháng một bản vẫn giữ nguyên.

G1 thành mặc định: máy chủ nhỏ sẽ thấy khác biệt

Trước đây HotSpot chỉ chọn G1 khi nhận diện máy là "server-class". Với container hoặc máy ảo ít CPU, ít RAM, JVM có thể tự rơi về Serial GC. Trang Linuxiac mô tả rằng JDK 27 chọn G1 bất cứ khi nào không chỉ định bộ thu gom, bất kể cấu hình phần cứng.

Điều này đáng quan tâm với các team chạy microservice trên Kubernetes với giới hạn 1 vCPU và vài trăm MB bộ nhớ. Khi lên JDK 27, hành vi GC của những pod đó có thể đổi mà không ai sửa dòng cấu hình nào. Cách kiểm tra nhanh:

  • Chạy java -Xlog:gc -version trên image hiện tại và trên image JDK 27, so sánh tên GC được in ra.
  • Nếu dịch vụ đang phụ thuộc vào Serial GC vì độ trễ khởi động thấp, thêm cờ -XX:+UseSerialGC một cách tường minh trước khi đổi image.
  • Theo dõi RSS của tiến trình trong một tuần thử nghiệm: G1 thường cần thêm bộ nhớ cho cấu trúc nội bộ.

Nếu hệ thống của bạn đang tách nhỏ thành nhiều dịch vụ như mô tả trong bài so sánh microservices và monolithic, hãy thử trên vài pod ít tải trước rồi mới nhân rộng.

Compact object headers: tiết kiệm heap không cần sửa code

JEP 534 rút header của mỗi đối tượng từ 96 bit xuống 64 bit trên kiến trúc 64 bit. Ứng dụng tạo nhiều đối tượng nhỏ (DTO, entity của ORM, phần tử trong collection) sẽ hưởng lợi rõ nhất vì header chiếm tỷ lệ lớn trong kích thước mỗi object. Oracle cho rằng thay đổi này giảm dung lượng heap và cải thiện tính cục bộ dữ liệu.

Với JDK 25, tính năng này đã có nhưng phải bật bằng cờ. Ở JDK 27 nó thành mặc định, nên một số thư viện dùng Unsafe hoặc tự tính offset trường có thể gặp lỗi. Danh sách cần rà: các thư viện serialization cũ, công cụ đo kích thước object, agent giám sát hiệu năng phiên bản lâu chưa cập nhật.

TLS 1.3 lai hậu lượng tử: bật sẵn qua javax.net.ssl

JEP 527 kết hợp một thuật toán truyền thống với một thuật toán kháng lượng tử khi bắt tay TLS 1.3. Ứng dụng dùng javax.net.ssl nhận được cơ chế này mà không phải sửa code. Mục tiêu là chống kịch bản "thu thập bây giờ, giải mã sau": kẻ tấn công lưu lưu lượng mã hóa hôm nay và chờ tới khi có máy tính lượng tử đủ mạnh.

Hai lưu ý thực tế:

  • Gói tin ClientHello lớn hơn do khóa công khai hậu lượng tử dài hơn. Một số middlebox, WAF hoặc load balancer cũ có thể xử lý sai gói tin lớn. Nên thử kết nối từ JDK 27 tới các API đối tác (ngân hàng, cổng thanh toán, hóa đơn điện tử) trong môi trường staging.
  • Khi phía máy chủ chưa hỗ trợ nhóm khóa lai, kết nối sẽ thương lượng về nhóm truyền thống, nên rủi ro gián đoạn chủ yếu nằm ở thiết bị trung gian chứ không phải ở máy chủ đích.

Nếu bạn đang xây quy trình kiểm tra bảo mật tự động, có thể bổ sung bước này vào pipeline theo cách tiếp cận trong bài xu hướng DevSecOps.

JFR redaction: bớt rò rỉ bí mật qua file chẩn đoán

JEP 536 cho phép JFR ẩn tham số dòng lệnh, giá trị biến môi trường và system property trước khi bản ghi rời tiến trình. Chuyện này nghe nhỏ nhưng rất thực tế: nhiều đội gửi file .jfr cho bên hỗ trợ hoặc đính kèm vào ticket, trong khi biến môi trường lại chứa mật khẩu database hay khóa API. Khi lên JDK 27, nên bật tùy chọn ẩn dữ liệu cho mọi bản ghi xuất ra ngoài.

Linuxiac cũng ghi nhận vài cải tiến công cụ đi kèm: thread dump định dạng JSON dùng kiểu số cho một số định danh, chẩn đoán VM báo được số file descriptor đang mở và jcmd có tự hoàn thành lệnh trên Bash.

Các tính năng preview: học trước, chưa dùng production

Lazy constants, structured concurrency và pattern matching cho kiểu nguyên thủy đều vẫn là preview, phải bật bằng --enable-preview. Structured concurrency đã tới lần preview thứ bảy, cho thấy API vẫn được tinh chỉnh. Vector API ở vòng incubator thứ 12 và vẫn chờ dự án Valhalla.

Cách hợp lý là tạo một module thử nghiệm riêng, viết vài bài tập với structured concurrency để so với cách dùng ExecutorService hiện tại. Khi các API này thành chính thức ở một bản LTS sau, đội đã có kinh nghiệm thay vì bắt đầu từ đầu.

Có nên lên JDK 27 lúc này?

Theo Linuxiac, Oracle cung cấp bản cập nhật cho JDK 27 tới tháng 3/2027, khi Java 28 dự kiến thay thế. Sáu tháng hỗ trợ là quá ngắn cho hầu hết hệ thống doanh nghiệp. Gợi ý theo từng tình huống:

  • Đang chạy JDK 17 hoặc 21: ưu tiên lên bản LTS gần nhất trước, dùng JDK 27 trong CI như một job "chạy thử" để phát hiện sớm vấn đề với G1 và compact headers.
  • Dịch vụ mới, vòng đời ngắn: có thể dùng JDK 27 nếu đội sẵn sàng nâng lên Java 28 vào khoảng tháng 3/2027.
  • Ứng dụng dùng nhiều thư viện native hoặc agent: chờ nhà cung cấp agent công bố hỗ trợ chính thức.

Một job CI chạy song song trên JDK 27 tốn ít công sức nhưng cho bạn tín hiệu sớm. Khi bản LTS kế tiếp ra, phần lớn thay đổi mặc định đã được kiểm chứng trên codebase của chính bạn.

Câu hỏi thường gặp

Java 27 có phải bản LTS không?

Không. JDK 27 là bản phát hành ngắn hạn, Oracle cập nhật tới khoảng tháng 3/2027 rồi chuyển sang Java 28. Doanh nghiệp cần hỗ trợ dài nên ở lại bản LTS gần nhất và chỉ thử JDK 27 trong môi trường kiểm thử.

Muốn giữ Serial GC trên JDK 27 thì làm sao?

Thêm cờ -XX:+UseSerialGC vào tham số khởi động JVM. Khi chỉ định tường minh, JDK 27 sẽ không tự chọn G1 nữa.

Compact object headers có làm hỏng ứng dụng cũ không?

Phần lớn ứng dụng chạy bình thường. Rủi ro tập trung ở thư viện truy cập bộ nhớ trực tiếp qua Unsafe hoặc tự tính offset trường. Hãy chạy bộ test đầy đủ và kiểm tra phiên bản các agent giám sát trước khi đổi image.

Tải JDK 27 ở đâu cho môi trường doanh nghiệp?

Có thể dùng bản OpenJDK từ các nhà phân phối như Oracle, Eclipse Temurin hoặc bản đóng gói của hệ điều hành. Nên chọn nhà phân phối mà đội đang dùng cho bản LTS để thống nhất cách cập nhật bảo mật.

Bài liên quan