hotspot/src/share/vm/services/management.cpp
void ThreadTimesClosure::do_thread(Thread* thread) {
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
Handle s;
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(thread != NULL, "thread was NULL");
{- -------------------------------------------
(1) もし処理対象が JavaThread ではなかったり,
HotSpot が内部的に使用するスレッドだった場合は,
特にすることはないので, ここでリターン.
---------------------------------------- -}
// exclude externally visible JavaThreads
if (thread->is_Java_thread() && !thread->is_hidden_from_external_view()) {
return;
}
{- -------------------------------------------
(1) 結果を格納するための配列(コンストラクタ引数で渡されていた配列)に
空き領域がなくなってしまっていたら,
もうこれ以上の値は格納できないので, ここでリターン.
---------------------------------------- -}
if (_count >= _names_len || _count >= _times_len) {
// skip if the result array is not big enough
return;
}
{- -------------------------------------------
(1) EXCEPTION_MARK (See: ExceptionMark)
---------------------------------------- -}
EXCEPTION_MARK;
{- -------------------------------------------
(1) 結果を格納するための配列(_names, _times)に
それぞれ処理対象のスレッドの名前, 及びそのスレッドの CPU 使用時間を格納する.
また, _count フィールドの値(= 処理したスレッド数を示す数値)もインクリメントしておく.
---------------------------------------- -}
assert(thread->name() != NULL, "All threads should have a name");
s = java_lang_String::create_from_str(thread->name(), CHECK);
_names->obj_at_put(_count, s());
_times->long_at_put(_count, os::is_thread_cpu_time_supported() ?
os::thread_cpu_time(thread) : -1);
_count++;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.