Up Top

同期排他処理 : ロック確保処理 : fast-path の処理 : monitorexit 命令の処理 : Template Interpreter での処理


概要(Summary)

処理は TemplateTable::monitorexit() が生成するコードによって行われる.

CPU 種別によって生成されるコードは異なるがどちらも処理の流れは同じ. 具体的には, InterpreterMacroAssembler::unlock_object() が生成するコードでロック解放を行う.

解放が fast-path で終わらない場合は, InterpreterRuntime::monitorexit() による slow-path 処理にフォールバックする (See: here for details).

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

sparc の場合

TemplateTable::monitorexit() が生成したコード
-> InterpreterMacroAssembler::unlock_object() が生成したコード
   -> MacroAssembler::biased_locking_exit() が生成したコード  (← biased locking を使用している場合にのみ呼び出される)
   -> InterpreterRuntime::monitorexit()                    (← fast-path が成功しなかった場合にのみ呼び出す)
      -> (See: here for details)

x86_64 の場合

TemplateTable::monitorexit() が生成したコード
-> InterpreterMacroAssembler::unlock_object() が生成したコード
   -> MacroAssembler::biased_locking_exit() が生成したコード  (← biased locking を使用している場合にのみ呼び出される)
   -> InterpreterRuntime::monitorexit()                    (← fast-path が成功しなかった場合にのみ呼び出す)
      -> (See: here for details)

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

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

See: here for details

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

See: here for details

MacroAssembler::biased_locking_exit() (sparc の場合)

See: here for details

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

See: here for details

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

See: here for details

MacroAssembler::biased_locking_exit() (x86_64 の場合)

See: here for details


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