hotspot/src/share/vm/prims/jvm.cpp
JVM_ENTRY(void, JVM_Yield(JNIEnv *env, jclass threadClass))
{- -------------------------------------------
(1) (トレース出力) (See: JVMWrapper)
---------------------------------------- -}
JVMWrapper("JVM_Yield");
{- -------------------------------------------
(1) os::dont_yield() を呼んで, yield 操作が許可されているかどうかを確認しておく.
ダメならここでリターン
---------------------------------------- -}
if (os::dont_yield()) return;
{- -------------------------------------------
(1) (DTrace のフック点)
---------------------------------------- -}
HS_DTRACE_PROBE0(hotspot, thread__yield);
{- -------------------------------------------
(1) os::sleep() または os::yield() を呼び出す.
(ConvertYieldToSleep オプションが指定されていれば os::sleep(), そうでなければ os::yield())
---------------------------------------- -}
// When ConvertYieldToSleep is off (default), this matches the classic VM use of yield.
// Critical for similar threading behaviour
if (ConvertYieldToSleep) {
os::sleep(thread, MinSleepInterval, false);
} else {
os::yield();
}
JVM_END
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.