Хотя я не тестировал G1 в производственной среде, я подумал, что прокомментирую, что сборщики мусора уже проблематичны для случаев без «огромных» куч. В частности, GC может серьезно повлиять на сервисы с, скажем, 2 или 4 гигабайтами. Сборщики мусора молодого поколения обычно не вызывают проблем, поскольку они заканчиваются за однозначные миллисекунды (или, самое большее, двузначные). Но коллекции старого поколения гораздо более проблематичны, так как они занимают несколько секунд при размерах старого поколения 1 гигабайт или выше.
Теперь: теоретически CMS может здесь очень помочь, так как она может выполнять большую часть своей работы одновременно. Однако со временем будут случаи, когда он не сможет этого сделать и будет вынужден вернуться к сбору «остановить мир». И когда это произойдет (скажем, через час - не часто, но все же слишком часто), ну, держитесь за свои гребаные шляпы. Это может занять минуту или больше. Это особенно проблематично для служб, которые пытаются ограничить максимальную задержку; вместо того, чтобы обрабатывать запрос, скажем, 25 миллисекунд, теперь он занимает десять секунд или больше. Чтобы добавить вреда к оскорблению, клиенты затем часто отключают запрос и повторяют попытку, что приводит к дальнейшим проблемам (так называемый «дерьмовый шторм»).
Это одна из областей, где G1 очень надеялся помочь. Я работал в большой компании, которая предлагает облачные сервисы для хранения и отправки сообщений; и мы не могли использовать CMS, поскольку, хотя большую часть времени она работала лучше, чем параллельные разновидности, у нее случались сбои. Так что около часа все было хорошо; а затем все поразило ... и поскольку обслуживание было основано на кластерах, когда один узел попадал в проблему, другие обычно следовали (поскольку таймауты, вызванные сборщиком мусора, приводят к тому, что другие узлы считают, что узел разбился, что привело к перенаправлению).
Я не думаю, что сборщик мусора представляет собой большую проблему для приложений, и, возможно, даже некластеризованные службы страдают реже. Но все больше и больше систем объединяются в кластеры (особенно благодаря хранилищам данных NoSQL), и размеры кучи растут. Сборщики мусора OldGen суперлинейно связаны с размером кучи (это означает, что удвоение размера кучи более чем удваивает время сборки мусора, при условии, что размер набора динамических данных также удваивается).