hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp
void ThreadLocalAllocBuffer::accumulate_statistics_before_gc() {
{- -------------------------------------------
(1) GlobalTLABStats::initialize() を呼んで, global_stats に格納している統計情報を全て 0 にリセットしておく.
---------------------------------------- -}
global_stats()->initialize();
{- -------------------------------------------
(1) 全ての JavaThread に対して
ThreadLocalAllocBuffer::accumulate_statistics() を呼び出し,
各 TLAB の _allocation_fraction に入っている統計情報や
global_stats 内の統計情報を更新しておく.
(なお, ThreadLocalAllocBuffer::accumulate_statistics() を呼び出した後は
ThreadLocalAllocBuffer::initialize_statistics() で統計情報を全て 0 にリセットしておく)
---------------------------------------- -}
for(JavaThread *thread = Threads::first(); thread; thread = thread->next()) {
thread->tlab().accumulate_statistics();
thread->tlab().initialize_statistics();
}
{- -------------------------------------------
(1) 少しでも TLAB の確保が発生していた場合は,
GlobalTLABStats::publish() で PerfData 等の値を更新しておく.
(ついでに, その場合には(トレース出力)も出している)
---------------------------------------- -}
// Publish new stats if some allocation occurred.
if (global_stats()->allocation() != 0) {
global_stats()->publish();
if (PrintTLAB) {
global_stats()->print();
}
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.