hotspot/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.cpp
void VM_ParallelGCSystemGC::doit() {
{- -------------------------------------------
(1) (DTrace のフック点) (JVMTI のフック点)
(See: SvcGCMarker)
---------------------------------------- -}
SvcGCMarker sgcm(SvcGCMarker::FULL);
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap();
assert(heap->kind() == CollectedHeap::ParallelScavengeHeap,
"must be a ParallelScavengeHeap");
GCCauseSetter gccs(heap, _gc_cause);
{- -------------------------------------------
(1) 呼び出し元が GC_locker の場合は, ParallelScavengeHeap::invoke_scavenge() を呼び出す.
そうでなければ, ParallelScavengeHeap::invoke_full_gc() を呼び出す.
---------------------------------------- -}
if (_gc_cause == GCCause::_gc_locker
DEBUG_ONLY(|| _gc_cause == GCCause::_scavenge_alot)) {
// If (and only if) the scavenge fails, this will invoke a full gc.
heap->invoke_scavenge();
} else {
heap->invoke_full_gc(false);
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.