Up Top

Method に関する処理 : Java のコードによるメソッド呼び出し処理 (1) : 呼び出し元(caller側)での invoke 処理 : Template Interpreter の場合 : invokevirtual の処理


概要(Summary)

(#Under Construction)

dynamic dispatch 処理は, それぞれ以下の関数が生成するコード内で行われる.

備考(Notes)

呼び出し先のメソッドに final 修飾子が付いている場合, sparc 版では Bytecodes::_fast_invokevfinal への書き換えを行う (See: here for details). そのため, 二回目以降の呼び出しは少し速くなる.

(なお, x86 版では書き換えは行わない)

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

sparc の場合

* 1 回目
  TemplateTable::invokevirtual() が生成したコード
  -> * final が付いている場合
       -> TemplateTable::invokevfinal_helper()  が生成したコード
          -> InterpreterMacroAssembler::call_from_interpreter()  が生成したコード
             -> (実際の呼び出し先にジャンプ)
     * final が付いていない場合
       -> TemplateTable::generate_vtable_call()  が生成したコード
          -> InterpreterMacroAssembler::call_from_interpreter()  が生成したコード
             -> (同上)

* 2 回目 (書き換え後)
  TemplateTable::_fast_invokevirtual()  が生成したコード
  -> TemplateTable::invokevfinal_helper()  が生成したコード
     -> (同上)

x86_64 の場合

TemplateTable::invokevirtual()  が生成したコード
-> TemplateTable::prepare_invoke()  が生成したコード
-> TemplateTable::invokevirtual_helper()  が生成したコード
   -> InterpreterMacroAssembler::jump_from_interpreted()  が生成したコード
      -> InterpreterMacroAssembler::prepare_to_jump_from_interpreted()  が生成したコード
      -> (実際の呼び出し先にジャンプ)

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

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

See: here for details

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

(#Under Construction) See: here for details

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

See: here for details

InterpreterMacroAssembler::call_from_interpreter()

See: here for details

TemplateTable::generate_vtable_call()

See: here for details

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

See: here for details

TemplateTable::invokevirtual() (x86_64 の場合)

See: here for details

TemplateTable::prepare_invoke()

See: here for details

InterpreterMacroAssembler::save_bcp() (x86_64 の場合)

See: here for details

TemplateTable::load_invoke_cp_cache_entry() (x86_64 の場合)

(#Under Construction) See: here for details

TemplateTable::invokevirtual_helper() (x86_64 の場合)

See: here for details

InterpreterMacroAssembler::jump_from_interpreted()

See: here for details

InterpreterMacroAssembler::prepare_to_jump_from_interpreted()

See: here for details


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