hotspot/src/share/vm/memory/threadLocalAllocBuffer.cpp
void ThreadLocalAllocBuffer::initialize() {
{- -------------------------------------------
(1) ThreadLocalAllocBuffer::initialize(HeapWord* start, HeapWord* top, HeapWord* end) を呼んで,
フィールドの初期化を行う.
---------------------------------------- -}
initialize(NULL, // start
NULL, // top
NULL); // end
{- -------------------------------------------
(1) ThreadLocalAllocBuffer::set_desired_size() を呼んで,
ThreadLocalAllocBuffer::desired_size() の値を初期化しておく.
---------------------------------------- -}
set_desired_size(initial_desired_size());
{- -------------------------------------------
(1) _allocation_fraction に入っている統計情報を初期化する.
(これは TLAB の動的サイズ調整時に参照される情報 (See: ThreadLocalAllocBuffer::resize()))
(ただし, メインスレッド(primordial thread) の場合は, Universe の初期化が終わる前にここに到達する.
その場合だけは, 初期化に必要な情報が得られないため, ここでは初期化しない.
メインスレッドについては, 代わりに ThreadLocalAllocBuffer::startup_initialization() で初期化する.)
---------------------------------------- -}
// Following check is needed because at startup the main (primordial)
// thread is initialized before the heap is. The initialization for
// this thread is redone in startup_initialization below.
if (Universe::heap() != NULL) {
size_t capacity = Universe::heap()->tlab_capacity(myThread()) / HeapWordSize;
double alloc_frac = desired_size() * target_refills() / (double) capacity;
_allocation_fraction.sample(alloc_frac);
}
{- -------------------------------------------
(1) ThreadLocalAllocBuffer::refill_waste_limit() の値を初期値に戻しておく.
(See: CollectedHeap::allocate_from_tlab_slow())
---------------------------------------- -}
set_refill_waste_limit(initial_refill_waste_limit());
{- -------------------------------------------
(1) ThreadLocalAllocBuffer::initialize_statistics() を呼んで,
統計情報を全て 0 にリセットしておく
---------------------------------------- -}
initialize_statistics();
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.