Runtime の関数の中で Runtime 外から呼び出される可能性があるもの (= Runtime 外からの entry point になるもの) については, 呼び出し時に明示的に SafepointSynchronize::_state のチェックが行われる. この時点で Safepoint が開始されていた場合, そのスレッドはその場で停止する.
より具体的に言うと, 上記のような Runtime の関数は定義時に以下のマクロを用いて定義されている.
これらのマクロが生成するコードから ThreadInVMfromJava のコンストラクタ/デストラクタが呼び出され, その中で SafepointSynchronize::_state の値を確認している.
IRT_ENTRY は InterpreterRuntime 向け, JRT_ENTRY はその他の Runtime 向け (See: InterpreterRuntime, SharedRuntime, Runtime1, OptoRuntime, SharkRuntime).
((cite: hotspot/src/share/vm/runtime/interfaceSupport.hpp))
// Definitions for IRT (Interpreter Runtime)
// (thread is an argument passed in to all these routines)
((cite: hotspot/src/share/vm/runtime/interfaceSupport.hpp))
// Definitions for JRT (Java (Compiler/Shared) Runtime)
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.