Top


定義場所(file name)

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

名前(function name)

void BiasedLocking::revoke_at_safepoint(Handle h_obj) {

本体部(body)

  {- -------------------------------------------
  (1) (assert)
      ---------------------------------------- -}

      assert(SafepointSynchronize::is_at_safepoint(), "must only be called while at safepoint");

  {- -------------------------------------------
  (1) まず update_heuristics() を呼んで, heuristics 情報を更新し, どうすべきかを決める.
      ---------------------------------------- -}

      oop obj = h_obj();
      HeuristicsResult heuristics = update_heuristics(obj, false);

  {- -------------------------------------------
  (1) heuristics の結果が HR_SINGLE_REVOKE であれば, revoke_bias() で対象のオブジェクトを revoke させる.
      ---------------------------------------- -}

      if (heuristics == HR_SINGLE_REVOKE) {
        revoke_bias(obj, false, false, NULL);

  {- -------------------------------------------
  (1) heuristics の結果が HR_BULK_REBIAS か HR_BULK_REVOKE であれば, 
      bulk_revoke_or_rebias_at_safepoint() で bulk revoke または bulk rebias を起こす.
      ---------------------------------------- -}

      } else if ((heuristics == HR_BULK_REBIAS) ||
                 (heuristics == HR_BULK_REVOKE)) {
        bulk_revoke_or_rebias_at_safepoint(obj, (heuristics == HR_BULK_REBIAS), false, NULL);
      }

  {- -------------------------------------------
  (1) キャッシュしていた情報はもう使えないので, 
      clean_up_cached_monitor_info() を呼び出して
      各 JavaThread 内にキャッシュしておいた「使用中のロック情報」を全部消しておく.

      (このキャッシュ情報は get_or_compute_monitor_info() 内で(のみ)参照されている.
       See: JavaThread::cached_monitor_info())
      ---------------------------------------- -}

      clean_up_cached_monitor_info();
    }

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