Garbage Collection 処理用の補助クラス(StackObjクラス).
ソースコード中のあるスコープの間だけ, CollectedHeap オブジェクトの _is_gc_active フィールドを true にするためのクラス.
((cite: hotspot/src/share/vm/gc_implementation/shared/isGCActiveMark.hpp))
// This class provides a method for block structured setting of the
// _is_gc_active state without requiring accessors in CollectedHeap
class IsGCActiveMark : public StackObj {
なお, is_gc_active は現在 STW 型の GC を実行中かどうか, を示すフィールド (GC 実行中には true にする).
((cite: hotspot/src/share/vm/gc_interface/collectedHeap.hpp))
// Returns "true" iff there is a stop-world GC in progress. (I assume
// that it should answer "false" for the concurrent part of a concurrent
// collector -- dld).
bool is_gc_active() const { return _is_gc_active; }
Universe::heap() に設定されている CollectedHeap オブジェクトに対し, コンストラクタで CollectedHeap::_is_gc_active を true に設定し, デストラクタで false に戻している.
((cite: hotspot/src/share/vm/gc_implementation/shared/isGCActiveMark.hpp))
IsGCActiveMark() {
CollectedHeap* heap = Universe::heap();
assert(!heap->is_gc_active(), "Not reentrant");
heap->_is_gc_active = true;
}
~IsGCActiveMark() {
CollectedHeap* heap = Universe::heap();
assert(heap->is_gc_active(), "Sanity");
heap->_is_gc_active = false;
}
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.