hotspot/src/share/vm/prims/jvm.cpp
// Returns an array of all live Thread objects (VM internal JavaThreads,
// jvmti agent threads, and JNI attaching threads are skipped)
// See CR 6404306 regarding JNI attaching threads
JVM_ENTRY(jobjectArray, JVM_GetAllThreads(JNIEnv *env, jclass dummy))
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
ResourceMark rm(THREAD);
{- -------------------------------------------
(1) ThreadsListEnumerator のコンストラクタで, 全スレッドの一覧を取得.
---------------------------------------- -}
ThreadsListEnumerator tle(THREAD, false, false);
{- -------------------------------------------
(1) (プロファイル情報の記録) (See: JvmtiVMObjectAllocEventCollector)
---------------------------------------- -}
JvmtiVMObjectAllocEventCollector oam;
{- -------------------------------------------
(1) 返値は java.lang.Thread[] として返す必要があるため,
結果を入れる java.lang.Thread 配列を確保.
---------------------------------------- -}
int num_threads = tle.num_threads();
objArrayOop r = oopFactory::new_objArray(SystemDictionary::Thread_klass(), num_threads, CHECK_NULL);
objArrayHandle threads_ah(THREAD, r);
{- -------------------------------------------
(1) ThreadsListEnumerator::get_threadObj() を使って
各スレッドに対応する java.lang.Thread オブジェクトを取得し,
結果の配列に格納していく.
---------------------------------------- -}
for (int i = 0; i < num_threads; i++) {
Handle h = tle.get_threadObj(i);
threads_ah->obj_at_put(i, h());
}
{- -------------------------------------------
(1) 結果を JNIHandle 化してリターン.
---------------------------------------- -}
return (jobjectArray) JNIHandles::make_local(env, threads_ah());
JVM_END
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.