hotspot/src/share/vm/memory/genCollectedHeap.cpp
HeapWord* GenCollectedHeap::attempt_allocation(size_t size,
bool is_tlab,
bool first_only) {
{- -------------------------------------------
(1) 各 Generation に対して, 若い世代から順に
Generation::should_allocate() でその Generation で確保すべきオブジェクトかどうかを調べ,
should_allocate() が true を返せば, Generation::allocate() でメモリ確保を試みる.
メモリ確保が成功した時点でリターン. (もし, 全ての Generation で失敗すれば NULL をリターン).
また, 引数の first_only が true であれば, 一回目の Generation::allocate() が終わった時点で成否に関わらず結果をリターン.
---------------------------------------- -}
HeapWord* res;
for (int i = 0; i < _n_gens; i++) {
if (_gens[i]->should_allocate(size, is_tlab)) {
res = _gens[i]->allocate(size, is_tlab);
if (res != NULL) return res;
else if (first_only) break;
}
}
// Otherwise...
return NULL;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.