処理は TemplateTable::monitorexit() が生成するコードによって行われる.
CPU 種別によって生成されるコードは異なるがどちらも処理の流れは同じ. 具体的には, InterpreterMacroAssembler::unlock_object() が生成するコードでロック解放を行う.
解放が fast-path で終わらない場合は, InterpreterRuntime::monitorexit() による slow-path 処理にフォールバックする (See: here for details).
TemplateTable::monitorexit() が生成したコード -> InterpreterMacroAssembler::unlock_object() が生成したコード -> MacroAssembler::biased_locking_exit() が生成したコード (← biased locking を使用している場合にのみ呼び出される) -> InterpreterRuntime::monitorexit() (← fast-path が成功しなかった場合にのみ呼び出す) -> (See: here for details)
TemplateTable::monitorexit() が生成したコード -> InterpreterMacroAssembler::unlock_object() が生成したコード -> MacroAssembler::biased_locking_exit() が生成したコード (← biased locking を使用している場合にのみ呼び出される) -> InterpreterRuntime::monitorexit() (← fast-path が成功しなかった場合にのみ呼び出す) -> (See: here for details)
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.