(#Under Construction)
dynamic dispatch 処理は, それぞれ以下の関数が生成するコード内で行われる.
itable 内を探索する処理は instanceKlass::method_at_itable() の内容とほぼ同じなので, こちらを先に見た方が分かりやすい??
TemplateTable::invokeinterface() が生成したコード
-> * 対象が java.lang.Object のメソッドの場合
-> TemplateTable::invokeinterface_object_method() が生成したコード
-> (実際の呼び出し先にジャンプ)
* java.lang.Object ではない場合
-> InterpreterMacroAssembler::call_from_interpreter() が生成したコード
-> (実際の呼び出し先にジャンプ)
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() が生成したコード
-> (実際の呼び出し先にジャンプ)
(#Under Construction) See: here for details
(#Under Construction) See: here for details
See: here for details
See: here for details
(#Under Construction) 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.