処理は TemplateTable::monitorenter() が生成するコードによって行われる.
CPU 種別によって生成されるコードは異なるがどちらも処理の流れは同じ. 具体的には, BasicObjectLock を確保して oop を書き込んだ後, InterpreterMacroAssembler::lock_object() が生成するコードでロック確保を行う.
確保が失敗した場合は, InterpreterRuntime::monitorenter() による slow-path 処理にフォールバックする.
TemplateTable::monitorenter() が生成したコード -> InterpreterMacroAssembler::lock_object() が生成したコード -> MacroAssembler::biased_locking_enter() が生成したコード (← biased locking を使用している場合にのみ呼び出される) -> InterpreterRuntime::monitorenter() (← fast-path が成功しなかった場合にのみ呼び出す) -> (See: here for details)
TemplateTable::monitorenter() -> InterpreterMacroAssembler::lock_object() が生成したコード -> MacroAssembler::biased_locking_enter() が生成したコード (← biased locking を使用している場合にのみ呼び出される) -> InterpreterRuntime::monitorenter() (← 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
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.