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:
| JEP | Nội dung | Trạng thái |
|---|---|---|
| 523 | G1 là bộ thu gom rác mặc định | Chính thức |
| 527 | Trao đổi khóa lai hậu lượng tử cho TLS 1.3 | Chính thức |
| 531 | Lazy constants | Preview lần 3 |
| 532 | Kiểu nguyên thủy trong pattern, instanceof, switch | Preview lần 5 |
| 533 | Structured concurrency | Preview lần 7 |
| 534 | Compact object headers mặc định | Chính thức |
| 536 | Ẩn dữ liệu nhạy cảm trong bản ghi JFR | Chính thức |
| 537 | Vector API | Incubator lần 12 |
| 538 | Mã 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

Google Play yêu cầu target API 36: dev app Việt cần làm gì
Từ 31/8/2026 app mới và bản cập nhật trên Google Play phải target Android 16 (API 36); hạn gia hạn 1/11/2026 đã qua. Ảnh hưởng và các bước cập nhật app.

Chữ ký số miễn phí trên VNeID: cách tạo và dùng ký giấy tờ
Tạo chữ ký số cá nhân miễn phí trên VNeID theo Nghị quyết 66.22/2026/NQ-CP: các bước đăng ký, gói 12 tháng, phạm vi ký được và những lưu ý về dữ liệu.

Windows 11 26H2: có gì mới và cách cập nhật an toàn cho máy văn phòng
Windows 11 26H2 phát hành từ 29/9/2026 dạng gói kích hoạt nhỏ. Tính năng mới, thời hạn hỗ trợ tới 2028–2029, cách nhận bản cập nhật và lưu ý cho máy 24H2.

Node.js 26 lên LTS: có nên nâng cấp và lịch phát hành mới
Node.js 26 đã thành LTS, hỗ trợ tới 30/4/2029. Temporal bật sẵn, API cũ bị gỡ, và từ Node 27 mỗi năm chỉ còn một bản. Kế hoạch nâng cấp cho đội dev.