hotspot/src/share/vm/classfile/verifier.cpp
void ClassVerifier::verify_class(TRAPS) {
{- -------------------------------------------
(1) (トレース出力)
---------------------------------------- -}
if (_verify_verbose) {
tty->print_cr("Verifying class %s with new format",
_klass->external_name());
}
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
objArrayHandle methods(THREAD, _klass->methods());
int num_methods = methods->length();
{- -------------------------------------------
(1) verify 対象のクラスの全てのメソッドに対して
ClassVerifier::verify_method() を呼び出し,
verification を行う.
(ただし, verify 処理中の再帰的な処理により,
このクラスの verification が完了してしまうことがある.
そのため, 既に verification が完了してしまっていれば
(= ClassVerifier::was_recursively_verified() が true であれば)
その時点で終了してリターンする)
(また, 対象のメソッドがネイティブメソッドだったり abstract メソッドだった場合は
(検証のしようがないので) 何もしない)
---------------------------------------- -}
for (int index = 0; index < num_methods; index++) {
// Check for recursive re-verification before each method.
if (was_recursively_verified()) return;
methodOop m = (methodOop)methods->obj_at(index);
if (m->is_native() || m->is_abstract()) {
// If m is native or abstract, skip it. It is checked in class file
// parser that methods do not override a final method.
continue;
}
verify_method(methodHandle(THREAD, m), CHECK_VERIFY(this));
}
{- -------------------------------------------
(1) (トレース出力)
---------------------------------------- -}
if (_verify_verbose || TraceClassInitialization) {
if (was_recursively_verified())
tty->print_cr("Recursive verification detected for: %s",
_klass->external_name());
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.