| GC | Pause | Heap size | CPU overhead | Phù hợp |
|---|---|---|---|---|
| G1GC (Java 9+ default) | ~100-200ms | đến ~20GB | Thấp | General-purpose web service, batch |
| ZGC (Java 15+) | <10ms | 100GB+ | Cao hơn | Real-time, trading, gaming — latency-critical |
| Shenandoah (RedHat, OpenJDK 12+) | <10ms | Lớn | Nhỏ hơn ZGC | Tương tự ZGC, footprint nhỏ hơn |
Cách chọn:
1. Latency <10ms → ZGC (hoặc Shenandoah).
2. Heap lớn (>20GB) → ZGC hoặc Shenandoah.
3. General-purpose → G1GC (default, không cần config).
Cấu hình:
-XX:+UseG1GC # default Java 9+
-XX:+UseZGC -XX:+ZGenerational # Java 21 generational ZGC
-XX:+UseShenandoahGCMonitor: -Xlog:gc* để in GC log; JFR (Java Flight Recorder) phân tích pause time. Validate bằng metric thực tế trước khi đổi GC.
Lưu ý: đổi GC không phải lúc nào cũng cải thiện — JIT/heap sizing thường là nguyên nhân thật. Profile trước rồi mới tune.