私は本番環境で G1 をテストしていませんが、「巨大な」ヒープがない場合、GC はすでに問題があるとコメントしたいと思います。具体的には、たとえば 2 ギガまたは 4 ギガだけのサービスは、GC によって深刻な影響を受ける可能性があります。若い世代の GC は通常、1 桁のミリ秒 (または最大で 2 桁) で終了するため、問題はありません。しかし、古い世代のコレクションは、1 ギガ以上の古い世代のサイズで数秒かかるため、はるかに問題があります。
現在: 理論的には、CMS はほとんどの操作を同時に実行できるため、そこで大いに役立ちます。ただし、時間の経過とともに、これを行うことができず、「世界を止める」コレクションにフォールバックしなければならない場合があります。そして、それが起こったとき(たとえば、1時間後-頻繁ではありませんが、それでも頻繁に)、まあ、あなたのf *** ing帽子を握ってください. 1 分以上かかる場合があります。これは、最大レイテンシを制限しようとするサービスにとって特に問題です。たとえば、リクエストを処理するのに 25 ミリ秒かかっていたのが、10 秒以上かかるようになりました。侮辱的なクライアントに傷害を追加すると、多くの場合、リクエストがタイムアウトして再試行され、さらなる問題 (別名「シット ストーム」) につながります。
これは、G1 が大いに役立つと期待されていた分野の 1 つです。私は、ストレージとメッセージ ディスパッチ用のクラウド サービスを提供する大企業で働いていました。また、CMS を使用することはできませんでした。これは、多くの場合、並行バージョンよりもうまく機能していましたが、これらのメルトダウンがあったためです。それで、約1時間、物事はうまくいきました。そして、物事はファンにぶつかりました...そして、サービスはクラスターに基づいていたため、1つのノードがトラブルに陥ると、他のノードが通常続きました(GCによって引き起こされるタイムアウトにより、他のノードはノードがクラッシュしたと信じ、再ルーティングにつながるため).
GC はアプリにとってそれほど問題ではないと思います。おそらく、クラスター化されていないサービスでさえ影響を受けることはあまりありません。しかし、ますます多くのシステムがクラスター化され (特に NoSQL データ ストアのおかげで)、ヒープ サイズが増大しています。OldGen GC は、ヒープ サイズに非常に直線的に関連しています (ライブ データ セットのサイズも 2 倍になると仮定すると、ヒープ サイズを 2 倍にすると GC 時間が 2 倍以上になることを意味します)。