hotspot/src/share/vm/services/management.cpp
instanceOop Management::create_thread_info_instance(ThreadSnapshot* snapshot,
objArrayHandle monitors_array,
typeArrayHandle depths_array,
objArrayHandle synchronizers_array,
TRAPS) {
{- -------------------------------------------
(1) instanceKlassHandle::allocate_instance_handle() で
新しい java.lang.management.ThreadInfo オブジェクトを生成し,
さらに JavaCalls::call_special() でコンストラクタを呼び出して初期化も行う.
(なお, コンストラクタとしては,
引数スロットが 17 個文のコンストラクタ(= ロック情報付きのコンストラクタ)が呼ばれる)
(なお, コンストラクタに渡す引数のほとんどは,
initialize_ThreadInfo_constructor_arguments() という補助関数内でセットされている)
返値としては, 生成した java.lang.management.ThreadInfo オブジェクトが返される.
---------------------------------------- -}
klassOop k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL);
instanceKlassHandle ik (THREAD, k);
JavaValue result(T_VOID);
JavaCallArguments args(17);
// First allocate a ThreadObj object and
// push the receiver as the first argument
Handle element = ik->allocate_instance_handle(CHECK_NULL);
args.push_oop(element);
// initialize the arguments for the ThreadInfo constructor
initialize_ThreadInfo_constructor_arguments(&args, snapshot, CHECK_NULL);
// push the locked monitors and synchronizers in the arguments
args.push_oop(monitors_array);
args.push_oop(depths_array);
args.push_oop(synchronizers_array);
// Call ThreadInfo constructor with locked monitors and synchronizers
JavaCalls::call_special(&result,
ik,
vmSymbols::object_initializer_name(),
vmSymbols::java_lang_management_ThreadInfo_with_locks_constructor_signature(),
&args,
CHECK_NULL);
return (instanceOop) element();
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.