Як згадувалося вище, якщо у вас є неінтерактивна програма, збирач сміття за замовчуванням (ущільнюючий) повинен добре працювати. Якщо у вас є інтерактивна програма, і ви (1) не розподіляєте пам’ять швидше, ніж GC може встигати, і (2) не створюєте занадто великі тимчасові об’єкти (або колекції об’єктів) (відносно загальної кількості максимальна пам’ять JVM), щоб GC міг обійтись, тоді CMS для вас.
Ви стикаєтесь з проблемами, якщо у вас є інтерактивна програма, де в ГК недостатньо дихальної кімнати. Це правда, незалежно від того, скільки у вас пам’яті, але чим більше у вас пам’яті, тим гірше вона стає. Це тому, що коли у вас недостатньо пам’яті, у CMS закінчується пам’ять, тоді як ущільнювальні GC (включаючи G1) призупиняють все, поки вся пам’ять не буде перевірена на сміття. Ця пауза зупинки світу стає більшою, чим більше у вас пам’яті. Повірте, ви не хочете, щоб ваші сервлети зупинялися більше хвилини. Я написав докладну відповідь StackOverflow про ці паузи в G1.
З тих пір моя компанія перейшла на Azul Zing. Він все ще не може впоратись із випадком, коли вашій програмі дійсно потрібно більше пам’яті, ніж у вас є, але до того самого моменту вона працює як мрія.
Але, звичайно, Zing не є безкоштовним, а його спеціальний соус запатентований. Якщо у вас є набагато більше часу, ніж грошей, спробуйте переписати програму, щоб використовувати кластер JVM.
На горизонті Oracle працює над високопродуктивним ГХ для багатогігабайтних куп. Однак на сьогодні це не варіант.