hotspot/src/share/vm/services/memoryManager.cpp
void GCMemoryManager::gc_begin(bool recordGCBeginTime, bool recordPreGCUsage,
bool recordAccumulatedGCTime) {
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(_last_gc_stat != NULL && _current_gc_stat != NULL, "Just checking");
{- -------------------------------------------
(1) (引数の recordAccumulatedGCTime が指定されていれば) GC 開始時の時刻を記録しておく.
(See: sun.management.GarbageCollectorImpl.getCollectionTime())
---------------------------------------- -}
if (recordAccumulatedGCTime) {
_accumulated_timer.start();
}
{- -------------------------------------------
(1) (引数の recordGCBeginTime が指定されていれば) GC 開始時の時刻を記録しておく.
(See: GCStatInfo)
---------------------------------------- -}
// _num_collections now increases in gc_end, to count completed collections
if (recordGCBeginTime) {
_current_gc_stat->set_index(_num_collections+1);
_current_gc_stat->set_start_time(Management::timestamp());
}
{- -------------------------------------------
(1) (引数の recordPreGCUsage が指定されていれば)
全ての MemoryPool に対して, GCStatInfo::set_before_gc_usage() を呼び出して
GC 開始時の使用量を記録しておく.
ついでに, (DTrace のフック点)でもある.
---------------------------------------- -}
if (recordPreGCUsage) {
// Keep memory usage of all memory pools
for (int i = 0; i < MemoryService::num_memory_pools(); i++) {
MemoryPool* pool = MemoryService::get_memory_pool(i);
MemoryUsage usage = pool->get_memory_usage();
_current_gc_stat->set_before_gc_usage(i, usage);
HS_DTRACE_PROBE8(hotspot, mem__pool__gc__begin,
name(), strlen(name()),
pool->name(), strlen(pool->name()),
usage.init_size(), usage.used(),
usage.committed(), usage.max_size());
}
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.