ちょっと質問があります - JDK 7 のすべての GC (G1 以外) は常に若い世代のコレクションに stop-the-world を使用するというのは本当ですか?
ありがとう
ちょっと質問があります - JDK 7 のすべての GC (G1 以外) は常に若い世代のコレクションに stop-the-world を使用するというのは本当ですか?
ありがとう
OpenJDK、JRockit、IBM JVM、および Sun/Oracle JDK の場合、若いコレクションは、使用可能なすべてのコレクターに対して常に世界を停止します。
私が知っている唯一の JVM で、世界中のコレクターが止まらないのは Azul の Zing です。(無料ではありません)
OpenJDK/Hotspot には CMS がありますが、これはほとんど同時実行です。ストップ ザ ワールドの部分がまだあり、場合によっては、CMS はストップ ザ ワールドであるフル GC にフォールバックします。
私の知る限り、G1がCMSよりも一時停止時間の点で速い実世界の例を見つけるのは難しいですが、常に改善されています.
すべての (ほぼ) Java ガベージ コレクターには、排他的なシステム操作が完了するのを待って、すべての Java スレッド (ネイティブ スレッドではない) が一時停止される、ある種のストップ ザ ワールド フェーズがあります。この状態は、セーフポイントと呼ばれることもあります。
最新のガベージ コレクターは、アプリケーション スレッドと同時に実行されます。つまり、ガベージ コレクターは、アプリケーション スレッドの実行と同時に作業を実行します。ガベージ コレクタ プロセス中には、排他的アクセス メモリが必要なフェーズがあり、そのフェーズでは、アプリケーションの Java スレッドがセーフポイント状態になります。
ストップザワールド ガベージ コレクションを取り除く 1 つの代替手段は、Azul システムの C4 コレクターを備えた Zing JVM を使用することです。実装には、一時停止の少ないアプローチがあり、ストップ ザ ワールド コレクションはまったくありません。代わりに、stop-the-world フェーズのない同時圧縮アプローチを使用しています。
いいえ、そうではありません。 Java 7 は、古い Concurrent Mark Sweep (CMS) コレクターもサポートしています。CMS は、G1 と同様に一時停止の少ないコレクターです。
アップデート
どうやら CMS は在職世代のみを対象としているようです ... http://blogs.oracle.com/jonthecollector/entry/our_collectorsで見つけたブログ投稿によると...
つまり、あなたの命題は実際に正しいということです。
すべてのローポーズ コレクタは次のように主張できます。 - 作業のいくつかのフェーズを実行するためにミューテータ スレッドを停止する必要があり、 - 追いつかない場合、マーク/スイープ コレクタを使用してフル GC にフォールバックする可能性があります。
ただし、G1 や CMS などの「ほぼ同時に実行される」コレクターと、収集プロセスの全期間にわたって非 GC スレッドを一時停止する他のコレクターとの間には質的な違いがあります。これが、「ストップ・ザ・ワールド」戦略が通常意味するものです。