Embora eu não tenha testado o G1 em produção, pensei em comentar que os GCs já são problemáticos para casos sem pilhas "gigantescas". Especificamente, serviços com apenas, digamos, 2 ou 4 GB podem ser severamente afetados pelo GC. Os GCs de geração jovem geralmente não são problemáticos, pois terminam em milissegundos de um dígito (ou no máximo dois dígitos). Mas as coleções da velha geração são muito mais problemáticas, pois levam vários segundos com tamanhos da velha geração de 1 GB ou mais.
Agora: em teoria o CMS pode ajudar muito nisso, pois pode executar grande parte de sua operação simultaneamente. No entanto, com o tempo, haverá casos em que ele não poderá fazer isso e terá que voltar para a coleta "parar o mundo". E quando isso acontecer (depois de, digamos, 1 hora - não com frequência, mas ainda com muita frequência), bem, segure a porra do chapéu. Isso pode levar um minuto ou mais. Isso é especialmente problemático para serviços que tentam limitar a latência máxima; em vez de levar, digamos, 25 milissegundos para atender a uma solicitação, agora leva dez segundos ou mais. Adicionar injuria aos clientes insultuosos, muitas vezes, expira o pedido e tenta novamente, levando a mais problemas (também conhecido como "tempestade de merda").
Essa é uma área em que o G1 esperava ajudar muito. Trabalhei para uma grande empresa que oferece serviços em nuvem para armazenamento e envio de mensagens; e não podíamos usar o CMS porque, embora na maior parte do tempo funcionasse melhor do que as variedades paralelas, apresentava esses colapsos. Então, por cerca de uma hora as coisas estavam boas; e então as coisas caíram no ventilador ... e como o serviço era baseado em clusters, quando um nó tinha problemas, outros normalmente o seguiam (já que os tempos limite induzidos por GC levam a outros nós acreditam que o nó havia travado, levando a redirecionamentos).
Não acho que GC seja um grande problema para aplicativos, e talvez até serviços não agrupados sejam afetados com menos frequência. Porém, mais e mais sistemas são agrupados (especialmente graças aos armazenamentos de dados NoSQL) e os tamanhos de heap estão crescendo. Os GCs OldGen são superlinearmente relacionados ao tamanho do heap (o que significa que dobrar o tamanho do heap mais do que duplica o tempo do GC, assumindo que o tamanho do conjunto de dados ativo também dobra).