Up Top

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


概要(Summary)

(#Under Construction)

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

備考(Notes)

itable 内を探索する処理は instanceKlass::method_at_itable() の内容とほぼ同じなので, こちらを先に見た方が分かりやすい??

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

sparc の場合

TemplateTable::invokeinterface() が生成したコード
-> * 対象が java.lang.Object のメソッドの場合
     -> TemplateTable::invokeinterface_object_method()  が生成したコード
        -> (実際の呼び出し先にジャンプ)
   * java.lang.Object ではない場合
     -> InterpreterMacroAssembler::call_from_interpreter()  が生成したコード
        -> (実際の呼び出し先にジャンプ)

x86_64 の場合

TemplateTable::invokeinterface() が生成したコード
-> * 対象が java.lang.Object のメソッドの場合
     -> TemplateTable::invokevirtual_helper()  が生成したコード
        -> (See: here for details)
   * java.lang.Object ではない場合
     -> MacroAssembler::lookup_interface_method()  が生成したコード
     -> InterpreterMacroAssembler::jump_from_interpreted()  が生成したコード
        -> InterpreterMacroAssembler::prepare_to_jump_from_interpreted()  が生成したコード
        -> (実際の呼び出し先にジャンプ)

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

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

(#Under Construction) See: here for details

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

(#Under Construction) See: here for details

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

See: here for details

InterpreterMacroAssembler::call_from_interpreter()

See: here for details

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

(#Under Construction) See: here for details

TemplateTable::prepare_invoke()

See: here for details

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

See: here for details

MacroAssembler::lookup_interface_method()

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.