Obwohl ich G1 nicht in der Produktion getestet habe, dachte ich, ich würde sagen, dass GCs bereits für Fälle ohne "riesige" Haufen problematisch sind. Insbesondere Services mit beispielsweise 2 oder 4 Gigs können durch GC stark beeinträchtigt werden. GCs der jungen Generation sind normalerweise nicht problematisch, da sie in einstelligen Millisekunden (oder höchstens zweistellig) enden. Sammlungen der alten Generation sind jedoch viel problematischer, da sie bei Größen der alten Generation von 1 Gig oder mehr mehrere Sekunden dauern.
Jetzt: Theoretisch kann CMS dort sehr hilfreich sein, da es den größten Teil seines Betriebs gleichzeitig ausführen kann. Im Laufe der Zeit wird es jedoch Fälle geben, in denen dies nicht möglich ist und auf die Sammlung "Stop the World" zurückgegriffen werden muss. Und wenn das passiert (nach etwa 1 Stunde - nicht oft, aber immer noch zu oft), halten Sie sich an Ihren verdammten Hüten fest. Es kann eine Minute oder länger dauern. Dies ist besonders problematisch für Dienste, die versuchen, die maximale Latenz zu begrenzen. Anstatt beispielsweise 25 Millisekunden zu benötigen, um eine Anfrage zu bearbeiten, dauert es jetzt zehn Sekunden oder länger. Um Beleidigungen für beleidigende Kunden hinzuzufügen, wird die Anforderung dann häufig abgelaufen und erneut versucht, was zu weiteren Problemen führt (auch bekannt als "Shit Storm").
Dies ist ein Bereich, in dem G1 viel helfen sollte. Ich habe für ein großes Unternehmen gearbeitet, das Cloud-Services für die Speicherung und den Versand von Nachrichten anbietet. und wir konnten CMS nicht verwenden, da es zwar die meiste Zeit besser funktionierte als parallele Sorten, aber diese Zusammenbrüche aufwies. Für ungefähr eine Stunde waren die Dinge schön; und dann traf das Zeug den Fan ... und da der Dienst auf Clustern basierte, folgten normalerweise andere, wenn ein Knoten in Schwierigkeiten geriet (da GC-induzierte Zeitüberschreitungen dazu führten, dass andere Knoten glaubten, der Knoten sei abgestürzt, was zu Umleitungen führte).
Ich denke nicht, dass GC ein so großes Problem für Apps darstellt, und vielleicht sind sogar nicht geclusterte Dienste weniger häufig betroffen. Aber immer mehr Systeme werden geclustert (insbesondere dank NoSQL-Datenspeichern) und die Größe der Heaps wächst. OldGen-GCs sind superlinear mit der Heap-Größe verbunden (was bedeutet, dass die Verdoppelung der Heap-Größe die GC-Zeit mehr als verdoppelt, vorausgesetzt, die Größe des Live-Datensatzes verdoppelt sich ebenfalls).