Aunque no he probado G1 en producción, pensé que comentaría que los GC ya son problemáticos para los casos sin montones "enormes". Específicamente, los servicios con solo, digamos, 2 o 4 gigas pueden verse gravemente afectados por GC. Los GC de generación joven generalmente no son problemáticos ya que terminan en milisegundos de un solo dígito (o como mucho en dos dígitos). Pero las colecciones de la vieja generación son mucho más problemáticas ya que toman varios segundos con tamaños de la vieja generación de 1 giga o más.
Ahora: en teoría, CMS puede ayudar mucho allí, ya que puede ejecutar la mayor parte de su funcionamiento al mismo tiempo. Sin embargo, con el tiempo habrá casos en los que no podrá hacer esto y tendrá que recurrir a la colección "stop the world". Y cuando eso suceda (después de, digamos, 1 hora, no a menudo, pero todavía con demasiada frecuencia), bueno, agárrate a tus malditos sombreros. Puede tardar un minuto o más. Esto es especialmente problemático para los servicios que intentan limitar la latencia máxima; en lugar de tomar, digamos, 25 milisegundos para atender una solicitud, ahora toma diez segundos o más. Para agregar daño al insulto, los clientes a menudo agotan la solicitud y lo vuelven a intentar, lo que genera más problemas (también conocido como "tormenta de mierda").
Esta es un área en la que se esperaba que G1 ayudara mucho. Trabajé para una gran empresa que ofrece servicios en la nube para almacenamiento y envío de mensajes; y no pudimos usar CMS ya que, aunque la mayor parte del tiempo funcionaba mejor que las variedades paralelas, tenía estos colapsos. Así que durante una hora las cosas estuvieron bien; y luego las cosas golpearon el ventilador ... y debido a que el servicio se basaba en clústeres, cuando un nodo se metía en problemas, otros generalmente lo seguían (ya que los tiempos de espera inducidos por GC hacen que otros nodos crean que el nodo se ha bloqueado, lo que lleva a redireccionamientos).
No creo que GC sea un gran problema para las aplicaciones, y tal vez incluso los servicios no agrupados se vean afectados con menos frecuencia. Pero cada vez más sistemas están agrupados (especialmente gracias a los almacenes de datos NoSQL) y el tamaño de los montones está creciendo. Los GC de OldGen están superlinealmente relacionados con el tamaño del montón (lo que significa que duplicar el tamaño del montón más que duplica el tiempo del GC, asumiendo que el tamaño del conjunto de datos en vivo también se duplica).