hotspot/src/share/vm/services/management.cpp
(この関数は, 指定されたスレッドのスレッドダンプを取得するもの)
// Helper function to do thread dump for a specific list of threads
static void do_thread_dump(ThreadDumpResult* dump_result,
typeArrayHandle ids_ah, // array of thread ID (long[])
int num_threads,
int max_depth,
bool with_locked_monitors,
bool with_locked_synchronizers,
TRAPS) {
{- -------------------------------------------
(1) まず, 指定されたスレッドの個数分の配列を用意し (以下の thread_handle_array),
そこに指定されたスレッドを表す java.lang.Thread オブジェクトを詰めておく.
---------------------------------------- -}
// First get an array of threadObj handles.
// A JavaThread may terminate before we get the stack trace.
GrowableArray<instanceHandle>* thread_handle_array = new GrowableArray<instanceHandle>(num_threads);
{
MutexLockerEx ml(Threads_lock);
for (int i = 0; i < num_threads; i++) {
jlong tid = ids_ah->long_at(i);
JavaThread* jt = find_java_thread_from_id(tid);
oop thread_obj = (jt != NULL ? jt->threadObj() : (oop)NULL);
instanceHandle threadObj_h(THREAD, (instanceOop) thread_obj);
thread_handle_array->append(threadObj_h);
}
}
{- -------------------------------------------
(1) 上で作った java.lang.Thread 配列を引数として VM_ThreadDump を呼び出し,
対応するスレッドの現在の状態を取得する.
---------------------------------------- -}
// Obtain thread dumps and thread snapshot information
VM_ThreadDump op(dump_result,
thread_handle_array,
num_threads,
max_depth, /* stack depth */
with_locked_monitors,
with_locked_synchronizers);
VMThread::execute(&op);
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.