Như đã đề cập ở trên, nếu bạn có một chương trình không tương tác, bộ thu gom rác (GC) mặc định sẽ hoạt động tốt. Nếu bạn có một chương trình tương tác và bạn (1) không cấp phát bộ nhớ nhanh hơn mức GC có thể theo kịp và (2) không tạo các đối tượng tạm thời (hoặc tập hợp các đối tượng) quá lớn (so với tổng bộ nhớ JVM tối đa) để GC hoạt động xung quanh, thì CMS là dành cho bạn.
Bạn sẽ gặp rắc rối nếu bạn có một chương trình tương tác mà GC không có đủ chỗ thở. Điều đó đúng bất kể bạn có bao nhiêu bộ nhớ, nhưng bạn càng có nhiều bộ nhớ, nó càng trở nên tồi tệ. Đó là bởi vì khi bạn sắp hết bộ nhớ, CMS sẽ hết bộ nhớ, trong khi các GC nén (bao gồm cả G1) sẽ tạm dừng mọi thứ cho đến khi tất cả bộ nhớ đã được kiểm tra rác. Khoảng dừng giữa thế giới này càng lớn khi bạn có nhiều bộ nhớ. Tin tôi đi, bạn không muốn các servlet của mình tạm dừng hơn một phút. Tôi đã viết một câu trả lời StackOverflow chi tiết về những lần tạm dừng này trong G1.
Kể từ đó, công ty của tôi đã chuyển sang Azul Zing. Nó vẫn không thể xử lý trường hợp ứng dụng của bạn thực sự cần nhiều bộ nhớ hơn những gì bạn có, nhưng cho đến thời điểm đó, nó vẫn chạy như mơ.
Nhưng tất nhiên, Zing không miễn phí và nước sốt đặc biệt của nó đã được cấp bằng sáng chế. Nếu bạn có nhiều thời gian hơn tiền bạc, hãy thử viết lại ứng dụng của mình để sử dụng một nhóm JVM.
Về phía chân trời, Oracle đang làm việc trên một GC hiệu suất cao cho các heap nhiều gigabyte. Tuy nhiên, cho đến hôm nay đó không phải là một lựa chọn.