Up Top

Method に関する処理 : Java のコードによるメソッド呼び出し処理 (4) : 呼び出し先(callee 側)での return 処理 : Template Interpreter の場合


概要(Summary)

Template Interpreter による return 系のバイトコードの処理は, 全て TemplateTable::_return() 内で行われる.

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

sparc の場合

TemplateTable::_return() が生成するコード
-> (1) return_register_finalizer バイトコードの場合は, 必要に応じて Finalizer の登録処理を行う
       -> InterpreterRuntime::register_finalizer()

   (1) スタックフレームを破棄するための準備を行う (synchronized method であればロックの解除も行う)
       -> InterpreterMacroAssembler::remove_activation() が生成するコード
          -> InterpreterMacroAssembler::unlock_if_synchronized_method() が生成するコード
             -> (See: here for details)
          -> InterpreterMacroAssembler::notify_method_exit() が生成するコード

   (1) restore しつつ, リターン.

x86-64 の場合

TemplateTable::_return() が生成するコード
-> (1) return_register_finalizer バイトコードの場合は, 必要に応じて Finalizer の登録処理を行う
       -> InterpreterRuntime::register_finalizer()

   (1) スタックフレームを破棄するための準備を行う (synchronized method であればロックの解除も行う)
       -> InterpreterMacroAssembler::remove_activation() が生成するコード
          -> InterpreterMacroAssembler::unlock_object() が生成するコード
             -> (See: here for details)
          -> InterpreterMacroAssembler::notify_method_exit() が生成するコード

   (1) リターン.

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

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

See: here for details

InterpreterRuntime::register_finalizer()

(#Under Construction)

InterpreterMacroAssembler::remove_activation() (sparc の場合)

See: here for details

InterpreterMacroAssembler::notify_method_exit()

(#Under Construction)

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

See: here for details

InterpreterMacroAssembler::remove_activation() (x86-64 の場合)

See: here for details


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