これらは, G1CollectedHeap 使用時における Garbage Collection 処理用の補助クラス. より具体的に言うと, write barrier 処理を補佐するためのクラス (Snapshot-at-the-Beginning 方式の write barrier では変更前のポインタ値をどこかに記録しておく必要があるので, それを実現するためのクラス) (See: here and here for details).
write barrier の処理を補佐するための PtrQueue クラス (論文中では "current marking buffer").
Concurrent Marking Thread の動作中に Java プログラムによってポインタフィールドが変更された際には, そのフィールドの変更前の値がこのキューに記録される (See: here and here for details).
((cite: hotspot/src/share/vm/gc_implementation/g1/satbQueue.hpp))
// A ptrQueue whose elements are "oops", pointers to object heads.
class ObjPtrQueue: public PtrQueue {
write barrier 処理の中でキューにポインタが追加される. キューが一杯になった場合は SATBMarkQueueSet::handle_zero_index_for_thread() が呼び出され, 一杯になったキューが SATBMarkQueueSet に登録されるとともに, 新しいキューが用意される.
以下の箇所に(のみ)格納されている.
write barrier 処理でポインタが記録されるフィールド (= そのスレッドが変更したポインタを格納するキュー).
以下の箇所で(のみ)生成されている.
(JavaThread クラスの _satb_mark_queue フィールドは, ポインタ型ではなく実体なので, JavaThread オブジェクトの生成時に一緒に生成される)
(SATBMarkQueueSet クラスの _shared_satb_queue フィールドは, ポインタ型ではなく実体なので, SATBMarkQueueSet オブジェクトの生成時に一緒に生成される)
See: here for details
ObjPtrQueue クラス用の PtrQueueSet クラス.
Concurrent Marking 処理中に変更されたポインタフィールドの値を記録するためのクラス. ここに蓄積されたポインタ情報は Concurrent Marking の調査対象になる (See: here for details).
((cite: hotspot/src/share/vm/gc_implementation/g1/satbQueue.hpp))
class SATBMarkQueueSet: public PtrQueueSet {
JavaThread クラスの _satb_mark_queue_set フィールド (static フィールド) に(のみ)格納されている (これが, 各 JavaThread オブジェクト内の ObjPtrQueue から共有される).
(JavaThread クラスの _satb_mark_queue_set フィールドは, ポインタ型ではなく実体なので, 初期段階で自動的に生成される)
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.