hotspot/src/share/vm/gc_implementation/g1/heapRegion.inline.hpp
// Because of the requirement of keeping "_offsets" up to date with the
// allocations, we sequentialize these with a lock. Therefore, best if
// this is used for larger LAB allocations only.
inline HeapWord* G1OffsetTableContigSpace::par_allocate(size_t size) {
{- -------------------------------------------
(1) (なお, 以下の処理は _par_alloc_lock に格納している Mutex で排他を取って行う)
(これは, 上記のコメントの通り, block offset table の更新と atomic に行う必要があるため)
---------------------------------------- -}
MutexLocker x(&_par_alloc_lock);
{- -------------------------------------------
(1) ContiguousSpace::allocate() で確保を行い, 結果をリターン.
(なお, 確保が成功した場合には _offset に格納している block offset table を更新している)
(なお, lock を取っているので ContiguousSpace::par_allocate() の代わりに ContiguousSpace::allocate() を使っているとのこと)
---------------------------------------- -}
// Given that we take the lock no need to use par_allocate() here.
HeapWord* res = ContiguousSpace::allocate(size);
if (res != NULL) {
_offsets.alloc_block(res, size);
}
return res;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.