Up Top

Memory allocation (& GC 処理) : メモリの確保処理 (GC 処理) : slow-path の処理 (4) GC 処理 : GenCollectedHeap の場合 : Generation からのメモリの確保処理 : UseSerialGC の場合


概要(Summary)

GC 中の Generation からのメモリ確保処理は, Generation::par_allocate() または Generation::allocate() によって行われる (See: here for details).

UseSerialGC の場合, DefNewGeneration 及び TenuredGeneration の対応するメソッドが呼び出される. どちらの場合も, 実際の確保処理は ContiguousSpace::par_allocate_impl() または ContiguousSpace::allocate_impl() で行われている.

処理の流れ (概要)(Execution Flows : Summary)

DefNewGeneration の場合

Generation::par_allocate() の処理

DefNewGeneration::par_allocate()
-> EdenSpace::par_allocate()
   -> ContiguousSpace::par_allocate_impl()

Generation::allocate() の処理

DefNewGeneration::allocate()
-> (1) Eden 領域中からの確保を試みる. 成功すれば結果をリターン
       -> EdenSpace::par_allocate()
          -> (同上)
   (1) Eden 領域の soft limit を増加させて確保を試みる. 成功すれば結果をリターン
   (1) From 領域中からの確保を試みる
       -> DefNewGeneration::allocate_from_space()
          -> ContiguousSpace::allocate()
             -> ContiguousSpace::allocate_impl()

TenuredGeneration の場合

Generation::allocate() の処理

OneContigSpaceCardGeneration::allocate()
-> ContiguousSpace::allocate()
   -> (同上)

処理の流れ (詳細)(Execution Flows : Details)

DefNewGeneration::par_allocate()

See: here for details

EdenSpace::par_allocate()

See: here for details

ContiguousSpace::par_allocate_impl()

See: here for details

DefNewGeneration::allocate()

See: here for details

DefNewGeneration::allocate_from_space()

See: here for details

OneContigSpaceCardGeneration::allocate()

See: here for details

ContiguousSpace::allocate()

See: here for details

ContiguousSpace::allocate_impl()

See: here for details


This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.