hotspot/src/share/vm/prims/jvmtiThreadState.cpp
int JvmtiThreadState::cur_stack_depth() {
{- -------------------------------------------
(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.