Top


定義場所(file name)

hotspot/src/share/vm/prims/jvm.cpp

名前(function name)

JVM_ENTRY(void, JVM_Yield(JNIEnv *env, jclass threadClass))

本体部(body)

  {- -------------------------------------------
  (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.