Top


定義場所(file name)

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

名前(function name)

void BiasedLocking::revoke_at_safepoint(GrowableArray<Handle>* objs) {

本体部(body)

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

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

  {- -------------------------------------------
  (1) (以下の for ループで objs 引数の要素の個数分だけループし, それぞれの要素を処理する)
      ---------------------------------------- -}

      int len = objs->length();
      for (int i = 0; i < len; i++) {

    {- -------------------------------------------
  (1.1) (変数宣言など)
        ---------------------------------------- -}

        oop obj = (objs->at(i))();

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

        HeuristicsResult heuristics = update_heuristics(obj, false);

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

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

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