Up Top

Memory allocation (& GC 処理) : メモリの確保処理 (GC 処理) : fast-path の処理 : Template Interpreter での処理


概要(Summary)

各バイトコードの処理は, それぞれ以下のメソッドで行われる.

これらのメソッドは, ほとんどは InterpreterRuntime の対応するメソッドを呼び出すだけだが, TemplateTable::_new() にだけは fast-path が存在する.

TemplateTable::_new() の処理は, CPU 種別によって生成されるコードは異なるがどちらも処理の流れは同じ. 具体的には, fast-path での処理が行える状態かどうか(クラスの初期化などが終わっているかどうか)を確認した後, TLAB や shared eden から確保を試みる, 確保が失敗した場合は, slow-path 処理にフォールバックする.

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

オブジェクトの確保処理(new バイトコード命令の処理)

TemplateTable::_new()
-> (1) fast-path での確保処理が出来るかどうかをチェック (クラスの初期化が終わっているかどうかなど).
       出来なければ slow-path

   (1) UseTLAB が指定されていれば TLAB からの確保を試みる.
       成功すれば, 確保したオブジェクトを初期化した後, ここで終了.

   (1) shared eden からの確保を試みる.
       成功すれば, 確保したオブジェクトを初期化した後, ここで終了.

   (1) 確保が全部失敗したら slow path へフォールスルー
       -> InterpreterRuntime::_new()
          -> (See: here for details)

配列の確保処理(newarray バイトコード命令の処理)

TemplateTable::newarray()
-> InterpreterRuntime::newarray()
   -> (See: here for details)

オブジェクト配列の確保処理(anewarray バイトコード命令の処理)

TemplateTable::anewarray()
-> InterpreterRuntime::anewarray()
   -> (See: here for details)

多次元配列の確保処理(multianewarray バイトコード命令の処理)

TemplateTable::multianewarray()
-> InterpreterRuntime::multianewarray()
   -> (See: here for details)

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

TemplateTable::_new() (sparc の場合)

See: here for details

TemplateTable::newarray() (sparc の場合)

See: here for details

TemplateTable::anewarray() (sparc の場合)

See: here for details

TemplateTable::multianewarray() (sparc の場合)

See: here for details

TemplateTable::_new() (x86-64 の場合)

See: here for details

TemplateTable::newarray() (x86-64 の場合)

See: here for details

TemplateTable::anewarray() (x86-64 の場合)

See: here for details

TemplateTable::multianewarray() (x86-64 の場合)

See: here for details


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