2

CMS がフル GC で機能する 4 つの高レベル フェーズがあります。

  1. イニシャルマーク :- ストップ・ザ・ワールド(STW)
  2. 同時マーキング :- 同時に実行
  3. 備考:- STW
  4. 同時スイープ:- 同時に実行

読んだ後、CMS の高度な理解を得ました

http://www.tikalk.com/java/garbage-collection-serial-vs-parallel-vs-concurrent-mark-sweep/およびhttps://plumbr.eu/handbook/garbage-collection-algorithms-implementations/concurrent -マークアンドスイープ

私の質問はInitial Mark、なぜ最初のマークステージがフェーズの STW なのですか? これは和解の最終段階なので、STW として発言フェーズだけを使用することはできませんか。

同様にSweeping phase、オブジェクトの物理的な場所の変更を意味する圧縮が必要になるため、STW ではないのはなぜですか。オブジェクトがアプリによって参照され、並行スレッドが物理的な場所を変更した場合、それは問題になりませんか?

ここに何かが欠けていることは知っていますが、それは何ですか?

4

1 に答える 1

1

Oracle の HotSpot JVM での Concurrent Mark Sweep の実装について言及していると思います。

最初のマーク フェーズには、若いスペースのスキャンが含まれます (若いものから古いものへの参照はすべて、コンカレント マークのルートです)。Remark フェーズには、まったく同じ操作が含まれます。

理論的には、最初のマークの STW を省略して同時にスキャンすると、いくつかのルートが欠落するリスクがあります (最終的なリマーク時に回復されます)。ここには欠点がありますが

  • 若いコレクションがオブジェクトを移動しているため、メモリのスキャンが不正確になる場合があります。古いコレクターと若いコレクターの間の同期は、さらに複雑になります。
  • 不正確な初期マーク中に一部のルートが見落とされる場合、新しく見つかったルートから到達可能なオブジェクトをトラバースする必要があるため、リマークが大幅に長くなる可能性があります。

スイープはコンパクトにならないので STW は必要ありません。CMS は、同時サイクルで古い領域を圧縮しません。

これは、CMS GC 一時停止の性質と漸近性を説明する私の記事です。

于 2016-09-26T18:12:19.167 に答える