GC 中の Generation からのメモリ確保処理は, Generation::par_allocate() または Generation::allocate() によって行われる (See: here for details).
UseSerialGC の場合, DefNewGeneration 及び TenuredGeneration の対応するメソッドが呼び出される. どちらの場合も, 実際の確保処理は ContiguousSpace::par_allocate_impl() または ContiguousSpace::allocate_impl() で行われている.
DefNewGeneration::par_allocate() -> EdenSpace::par_allocate() -> ContiguousSpace::par_allocate_impl()
DefNewGeneration::allocate()
-> (1) Eden 領域中からの確保を試みる. 成功すれば結果をリターン
-> EdenSpace::par_allocate()
-> (同上)
(1) Eden 領域の soft limit を増加させて確保を試みる. 成功すれば結果をリターン
(1) From 領域中からの確保を試みる
-> DefNewGeneration::allocate_from_space()
-> ContiguousSpace::allocate()
-> ContiguousSpace::allocate_impl()
OneContigSpaceCardGeneration::allocate() -> ContiguousSpace::allocate() -> (同上)
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.