hotspot/src/share/vm/runtime/javaCalls.cpp
void JavaCalls::call_default_constructor(JavaThread* thread, methodHandle method, Handle receiver, TRAPS) {
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(method->name() == vmSymbols::object_initializer_name(), "Should only be called for default constructor");
assert(method->signature() == vmSymbols::void_method_signature(), "Should only be called for default constructor");
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
instanceKlass* ik = instanceKlass::cast(method->method_holder());
{- -------------------------------------------
(1) JavaCalls::call() で, 実際の呼び出し処理を行う.
(ただし, 対象のオブジェクトのクラスが完全に初期化が終わっており, かつ
コンストラクタがデフォルトのもの(何もしないコンストラクタ)であれば
呼び出しても意味は無いので, 何もしない)
---------------------------------------- -}
if (ik->is_initialized() && ik->has_vanilla_constructor()) {
// safe to skip constructor call
} else {
static JavaValue result(T_VOID);
JavaCallArguments args(receiver);
call(&result, method, &args, CHECK);
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.