Top


定義場所(file name)

hotspot/src/share/vm/runtime/biasedLocking.cpp

名前(function name)

  virtual void doit() {

本体部(body)

  {- -------------------------------------------
  (1) VM_RevokeBias には2種類のコンストラクタがあり, どちらが使われたかによって _obj フィールドが NULL かどうかが決まる.
      ここでは, その _obj フィールドの値に応じて2通りの処理を行う.

      * _obj フィールドが NULL でない場合:
        revoke_bias() を呼び出してリターンする.
      * _obj フィールドが NULL の場合:
        BiasedLocking::revoke_at_safepoint(GrowableArray<Handle>* objs) を呼び出してリターンする.

      (なお, _obj フィールドが NULL でない場合については, revoke_bias() の呼び出し後に
       clean_up_cached_monitor_info() の呼び出しも行い, 
       各 JavaThread 内にキャッシュしておいた「使用中のロック情報」を全部消す処理も行っている.
       このキャッシュ情報は get_or_compute_monitor_info() 内で(のみ)参照されている.
       See: JavaThread::cached_monitor_info())

      (なお, どちらの場合であっても, あわせて(トレース出力)も出している)
      ---------------------------------------- -}

        if (_obj != NULL) {

    {- -------------------------------------------
  (1.1) (トレース出力)
        ---------------------------------------- -}

          if (TraceBiasedLocking) {
            tty->print_cr("Revoking bias with potentially per-thread safepoint:");
          }
          _status_code = revoke_bias((*_obj)(), false, false, _requesting_thread);
          clean_up_cached_monitor_info();
          return;
        } else {

    {- -------------------------------------------
  (1.1) (トレース出力)
        ---------------------------------------- -}

          if (TraceBiasedLocking) {
            tty->print_cr("Revoking bias with global safepoint:");
          }
          BiasedLocking::revoke_at_safepoint(_objs);
        }
      }

This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.