ネイティブコードから HotSpot 内に戻ってきた際には, 明示的に SafepointSynchronize::_state のチェックが行われる.
この時点で Safepoint が開始されていた場合, そのスレッドはその場で停止する.
(See: here and here for details) -> InterpreterGenerator::generate_native_entry() or SharedRuntime::generate_native_wrapper() が生成したコード -> (1) JavaThreadState を _thread_in_native_trans に変更 (1) メモリアクセスの順序づけを行う -> MacroAssembler::membar() or MacroAssembler::serialize_memory() が生成したコード (1) SafepointSynchronize::_state の値を確認
シグナルハンドラ (JVM_handle_linux_signal() or JVM_handle_solaris_signal() or topLevelExceptionFilter()) (See: here for details) -> (1) os::serialize_thread_states() の処理との同期を取る -> os::block_on_serialize_page_trap()
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.