これらは, G1CollectedHeap 使用時における Garbage Collection 処理用の補助クラス. より具体的に言うと, Remembered Set の処理を補佐するためのクラス.
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp))
// A G1RemSet provides ways of iterating over pointers into a selected
// collection set.
G1CollectedHeap の Remembered Set 情報 (HeapRegionRemSet オブジェクト) を処理するためのクラス (See: HeapRegionRemSet).
Remembered Set 処理用のメソッドを提供している.
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp))
// A G1RemSet in which each heap region has a rem set that records the
// external heap references into it. Uses a mod ref bs to track updates,
// so that they can be used to update the individual region remsets.
class G1RemSet: public CHeapObj {
各 G1CollectedHeap オブジェクトの _g1_rem_set フィールドに(のみ)格納されている
G1CollectedHeap::initialize() 内で(のみ)生成されている.
定義されているフィールドは以下の通り.
unsigned conc_refinecards
CardTableModRefBS * _ct_bs
SharedHeap::_rem_set に入っている CardTableRS の _ct_bs フィールドの値(G1SATBCardTableLoggingModRefBS オブジェクト)と同じオブジェクト
(CardTableRS::CardTableRS() で作成した G1SATBCardTableLoggingModRefBS オブジェクトが CardTableRS::bs にセットされ, G1CollectedHeap::initialize() で生成された CardTableRS が SharedHeap::_rem_set にセットされる. その後, _barrier_set に, CardTableRS 中の _bs の値 (= 作成した G1SATBCardTableLoggingModRefBS) がセットされる. これが _mrbs にもコピーされ, 最終的に G1RemSet のコンストラクタに渡される)
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp))
G1CollectedHeap* _g1;
unsigned _conc_refine_cards;
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp))
CardTableModRefBS* _ct_bs;
SubTasksDone* _seq_task;
G1CollectorPolicy* _g1p;
ConcurrentG1Refine* _cg1r;
size_t* _cards_scanned;
size_t _total_cards_scanned;
// Used for caching the closure that is responsible for scanning
// references into the collection set.
OopsInHeapRegionClosure** _cset_rs_update_cl;
See: here for details
デバッグ用(開発時用)のクラス(?? #TODO) (関連する develop オプションが指定されている場合にのみ使用される) (See: G1RSLogCheckCardTable).
Barrier Set (CardTableModRefBS) 中にある dirty なカードの数を数えるための Closure クラス.
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp))
class CountNonCleanMemRegionClosure: public MemRegionClosure {
以下の箇所で(のみ)使用されている.
(が, この関数自体が使われていないような...?? #TODO)
ただし, develop オプションである G1RSLogCheckCardTable が変更されている場合(= false の場合)にのみ使用される. また, 使用用途は guarantee() でのチェックに用いるだけ (verify 用途).
CountNonCleanMemRegionClosure::do_MemRegion() が呼ばれる度に CountNonCleanMemRegionClosure::_n フィールドが対応する card 個数分だけ増加する (その MemRegion が g1 のヒープ外なら増加しないが...).
See: here for details
See: here for details
G1CollectedHeap の Major GC 処理で使用される補助クラス (See: here for details).
RebuildRSOutOfRegionClosure クラス内で使用される補助クラス. (Major GC の処理後に) 全ての HeapRegion の Remembered Set 情報を作成し直すための Closure クラス.
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp))
class UpdateRSOopClosure: public OopClosure {
各 RebuildRSOutOfRegionClosure オブジェクトの _cl フィールドに(のみ)格納されている.
(RebuildRSOutOfRegionClosure クラスの _cl フィールドは, ポインタ型ではなく実体なので, RebuildRSOutOfRegionClosure オブジェクトの生成時に一緒に生成される)
RebuildRSOutOfRegionClosure::doHeapRegion() 内で(のみ)使用されている.
See: here for details
G1CollectedHeap の Minor GC 処理("Evacuation Pause" 処理)で使用される Closure クラス (See: here for details).
Minor GC がメモリ不足で失敗した場合に, コピーできなかったオブジェクトについて, Remembered Set 情報を作成し直す.
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp))
class UpdateRSetImmediate: public OopsInHeapRegionClosure {
以下の箇所で(のみ)使用されている (ただし G1CollectedHeap::remove_self_forwarding_pointers() の方については, develop オプションである G1DeferredRSUpdate が変更されている場合(= false の場合)にのみ使用される. G1DeferredRSUpdate オプションが true の場合には, 代わりに UpdateRSetDeferred クラスが使用される).
See: here for details
G1RemSet の処理で使用される補助クラス.
Remembered Set の修正処理を行うための Closure クラス.
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp))
class UpdateRSOrPushRefOopClosure: public OopClosure {
G1RemSet::concurrentRefineOneCard_impl() 内で(のみ)使用されている (See: here for details).
See: here for details
?? (このクラスは使用箇所が見当たらない...)
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp))
class IntoCSOopClosure: public OopsInHeapRegionClosure {
See: here for details
?? (このクラスは使用箇所が見当たらない...)
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp))
class VerifyRSCleanCardOopClosure: public OopClosure {
See: here for details
G1CollectedHeap の Minor GC 処理("Evacuation Pause" 処理)で使用される Closure クラス (See: here for details).
Collection Set 外から Collection Set 内を指しているポインタを処理する Closure.
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp))
class ScanRSClosure : public HeapRegionClosure {
G1RemSet::scanRS() 内で(のみ)使用されている
See: here for details
G1CollectedHeap の Minor GC 処理("Evacuation Pause" 処理)で使用される Closure クラス (See: here for details).
Collection Set 外から Collection Set 内を指しているポインタを発見し, Remembered Set を更新するための Closure.
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp))
// Closure used for updating RSets and recording references that
// point into the collection set. Only called during an
// evacuation pause.
class RefineRecordRefsIntoCSCardTableEntryClosure: public CardTableEntryClosure {
G1RemSet::updateRS() 内で(のみ)使用されている
See: here for details
デバッグ用(開発時用)のクラス (#ifndef PRODUCT 時にしか定義されない).
処理対象の HeapRegion の Remembered Set に関する情報を出力する Closure クラス
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp))
#ifndef PRODUCT
class PrintRSClosure : public HeapRegionClosure {
以下の箇所で(のみ)使用されている (ただし, #if G1_REM_SET_LOGGING 時にしか使用されない).
See: here for details
デバッグ用(開発時用)のクラス (関連する develop オプションが指定されている場合にのみ使用される) (See: G1RSCountHisto).
各 HeapRegion の Remembered Set に関する情報を収集する Closure クラス (Remembered Set として使用しているメモリ量(合計値,最大値,ヒストグラム情報), 最もメモリを使用している Remembered Set に対応する HeapRegion, 等).
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp))
class CountRSSizeClosure: public HeapRegionClosure {
G1RemSet::oops_into_collection_set_do() 内で(のみ)使用されている (ただし, G1RSCountHisto オプションが指定されている時にしか使用されない).
See: here for details
G1CollectedHeap の Minor GC 処理("Evacuation Pause" 処理)で使用される Closure クラス (See: here for details).
Minor GC がメモリ不足で失敗した場合に, Collection Set に入っている HeapRegion の Remembered Set の状態 (HeapRegionRemSet::_iter_state) をリセットするための Closure クラス.
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp))
class cleanUpIteratorsClosure : public HeapRegionClosure {
G1RemSet::cleanup_after_oops_into_collection_set_do() 内で(のみ)使用されている. そして, この関数は現在は以下のパスで(のみ)呼び出されている.
G1CollectedHeap::evacuate_collection_set() -> G1RemSet::cleanup_after_oops_into_collection_set_do()
See: here for details
G1CollectedHeap の Minor GC 処理("Evacuation Pause" 処理)で使用される Closure クラス (See: here for details).
Minor GC がメモリ不足で失敗した場合に, Collection Set 内を指している HeapRegion の Remembered Set を修正するための Closure クラス.
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp))
// This closure, applied to a DirtyCardQueueSet, is used to immediately
// update the RSets for the regions in the CSet. For each card it iterates
// through the oops which coincide with that card. It scans the reference
// fields in each oop; when it finds an oop that points into the collection
// set, the RSet for the region containing the referenced object is updated.
class UpdateRSetCardTableEntryIntoCSetClosure: public CardTableEntryClosure {
G1RemSet::cleanup_after_oops_into_collection_set_do() 内で(のみ)使用されている. そして, この関数は現在は以下のパスで(のみ)呼び出されている.
G1CollectedHeap::evacuate_collection_set() -> G1RemSet::cleanup_after_oops_into_collection_set_do()
See: here for details
G1ParScrubRemSetTask クラス内で使用される補助クラス.
生きているオブジェクトがいない HeapRegion について, そこに付いている Remembered Set 用のデータ構造を解放する.
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp))
class ScrubRSClosure: public HeapRegionClosure {
以下の箇所で(のみ)使用されている.
そして, これらの関数は現在は以下のパスで(のみ)呼び出されている.
* G1ParScrubRemSetTask::work() -> G1RemSet::scrub() * G1ParScrubRemSetTask::work() -> G1RemSet::scrub_par()
See: here for details
G1RemSet の処理で使用される補助クラス.
InvokeIfNotTriggeredClosure と組み合わせて使用される Closure クラス (See: InvokeIfNotTriggeredClosure).
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp))
class TriggerClosure : public OopClosure {
G1RemSet::concurrentRefineOneCard_impl() 内で(のみ)使用されている (See: here for details).
TriggerClosure::value() というメソッドを備えている. このメソッドは, 一度でも do_oop() が呼び出されたことがあれば true, そうでなければ false を返す.
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp))
TriggerClosure() : _trigger(false) { }
See: here for details
See: here for details
See: here for details
See: here for details
G1RemSet の処理で使用される補助クラス.
他の OopClosure と組み合わせて使用される Closure クラス. 「指定した TriggerClosure が false を返す場合にのみ OopClosure を適用したい」という場合に使用される.
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp))
class InvokeIfNotTriggeredClosure: public OopClosure {
G1RemSet::concurrentRefineOneCard_impl() 内で(のみ)使用されている (See: here for details).
コンストラクタで TriggerClosure と OopClosure を受け取る. 内部の処理では, TriggerClosure::value() が false を返した場合にのみ, 指定された OopClosure の適用を行う.
See: here for details
See: here for details
See: here for details
See: here for details
G1RemSet の処理で使用される補助クラス.
2つの OopClosure を合成した Closure を作成する (といっても関数合成ではなく同じ引数に対して2つを逐次的に適用するだけだけど).
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp))
class Mux2Closure : public OopClosure {
G1RemSet::concurrentRefineOneCard_impl() 内で(のみ)使用されている (See: here for details).
コンストラクタで 2つの OopClosure を受け取る. 内部の処理では, 単に 2つの OopClosure を順に適用するだけ.
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp))
Mux2Closure(OopClosure *c1, OopClosure *c2) : _c1(c1), _c2(c2) { }
See: here for details
See: here for details
See: here for details
デバッグ用(開発時用)のクラス (関連する develop オプションが指定されている場合にのみ使用される) (See: ExitAfterGCNum).
各 HeapRegion の Remembered Set に関する情報を収集する Closure クラス (Remembered Set として使用しているメモリ量(合計値,最大値), 最もメモリを使用している Remembered Set に対応する HeapRegion, 等).
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp))
class HRRSStatsIter: public HeapRegionClosure {
G1RemSet::print_summary_info() 内で(のみ)使用されている. そして, この関数は現在は以下のパスで(のみ)呼び出されている.
(なお, このクラスは (ExitAfterGCNum オプションに加えて) diagnostic オプションである G1SummarizeRSetStats も設定されている場合にしか使用されない)
G1CollectedHeap::do_collection_pause_at_safepoint() -> G1CollectedHeap::print_tracing_info() (<= ExitAfterGCNum オプションが指定されている場合にのみ呼び出す) -> G1RemSet::print_summary_info() (<= G1SummarizeRSetStats オプションが指定されている場合にのみ呼び出す)
See: here for details
デバッグ用(開発時用)のクラス (関連する develop オプションが指定されている場合にのみ使用される) (See: ExitAfterGCNum).
処理対象の ConcurrentG1RefineThread の稼働時間(生成されてからの時間)を出力する (See: ConcurrentG1RefineThread::vtime_accum(), ConcurrentG1RefineThread::run()).
((cite: hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp))
class PrintRSThreadVTimeClosure : public ThreadClosure {
G1RemSet::print_summary_info() 内で(のみ)使用されている. そして, この関数は現在は以下のパスで(のみ)呼び出されている.
(なお, このクラスは (ExitAfterGCNum オプションに加えて) diagnostic オプションである G1SummarizeRSetStats も設定されている場合にしか使用されない)
G1CollectedHeap::do_collection_pause_at_safepoint() -> G1CollectedHeap::print_tracing_info() (<= ExitAfterGCNum オプションが指定されている場合にのみ呼び出す) -> G1RemSet::print_summary_info() (<= G1SummarizeRSetStats オプションが指定されている場合にのみ呼び出す)
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.