Sebbene non abbia testato G1 in produzione, ho pensato di commentare che i GC sono già problematici per i casi senza cumuli "giganteschi". In particolare, i servizi con solo, diciamo, 2 o 4 gig possono essere gravemente influenzati da GC. I GC di giovane generazione di solito non sono problematici poiché terminano in millisecondi a una cifra (o al massimo a due cifre). Ma le raccolte di vecchia generazione sono molto più problematiche in quanto richiedono più secondi con dimensioni di vecchia generazione di 1 gig o superiore.
Ora: in teoria CMS può aiutare molto lì, poiché può eseguire la maggior parte delle sue operazioni contemporaneamente. Tuttavia, nel tempo ci saranno casi in cui non può farlo e deve ripiegare per "fermare il mondo". E quando ciò accade (dopo, diciamo, 1 ora - non spesso, ma ancora troppo spesso), beh, tieniti stretto i tuoi fottuti cappelli. Potrebbe volerci un minuto o più. Ciò è particolarmente problematico per i servizi che tentano di limitare la latenza massima; invece di impiegare, diciamo, 25 millisecondi per servire una richiesta, ora ci vogliono dieci secondi o più. Per aggiungere danni agli insulti, i clienti spesso scadono la richiesta e riprovano, portando a ulteriori problemi (noti anche come "tempesta di merda").
Questa è un'area in cui si sperava che G1 potesse aiutare molto. Ho lavorato per una grande azienda che offre servizi cloud per l'archiviazione e l'invio di messaggi; e non abbiamo potuto usare CMS poiché, sebbene la maggior parte delle volte funzionasse meglio delle varietà parallele, presentava questi crolli. Quindi per circa un'ora le cose andarono bene; e poi le cose hanno colpito la ventola ... e poiché il servizio era basato su cluster, quando un nodo ha avuto problemi, altri ne hanno seguiti tipicamente (poiché i timeout indotti da GC fanno sì che altri nodi credano che il nodo si sia arrestato in modo anomalo, portando a reindirizzamenti).
Non credo che GC sia un grosso problema per le app e forse anche i servizi non in cluster sono meno spesso interessati. Ma sempre più sistemi sono raggruppati in cluster (specialmente grazie agli archivi dati NoSQL) e le dimensioni degli heap stanno crescendo. I GC OldGen sono super-linearmente correlati alla dimensione dell'heap (il che significa che raddoppiare la dimensione dell'heap più che raddoppia il tempo GC, supponendo che anche la dimensione del set di dati live raddoppi).