Top


定義場所(file name)

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

名前(function name)

int JvmtiThreadState::cur_stack_depth() {

本体部(body)

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

      uint32_t debug_bits = 0;

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

      guarantee(JavaThread::current() == get_thread() ||
        JvmtiEnv::is_thread_fully_suspended(get_thread(), false, &debug_bits),
        "must be current thread or suspended");

  {- -------------------------------------------
  (1) _cur_stack_depth フィールドの値をリターンするだけ.

      (ただし, is_interp_only_mode でない場合や
      _cur_stack_depth フィールドの値が UNKNOWN_STACK_DEPTH の場合は
      JvmtiThreadState::count_frames() を呼んでスタックの深さをきちんと計算している.
      この場合は, 計算結果を _cur_stack_depth フィールドにキャッシュした後でリターン)
      ---------------------------------------- -}

      if (!is_interp_only_mode() || _cur_stack_depth == UNKNOWN_STACK_DEPTH) {
        _cur_stack_depth = count_frames();
      } else {
        // heavy weight assert
        assert(_cur_stack_depth == count_frames(),
               "cur_stack_depth out of sync");
      }
      return _cur_stack_depth;
    }

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