(#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.