hotspot/src/share/vm/classfile/systemDictionary.cpp
// ----------------------------------------------------------------------------
// Update hierachy. This is done before the new klass has been added to the SystemDictionary. The Recompile_lock
// is held, to ensure that the compiler is not using the class hierachy, and that deoptimization will kick in
// before a new class is used.
void SystemDictionary::add_to_hierarchy(instanceKlassHandle k, TRAPS) {
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(k.not_null(), "just checking");
assert_locked_or_safepoint(Compile_lock);
{- -------------------------------------------
(1)
---------------------------------------- -}
// Link into hierachy. Make sure the vtables are initialized before linking into
k->append_to_sibling_list(); // add to superklass/sibling list
k->process_interfaces(THREAD); // handle all "implements" declarations
k->set_init_state(instanceKlass::loaded);
{- -------------------------------------------
(1) (クラス階層に変更があったので) dependency 情報の変化に基づいて
不正になった nmethod を deopt する.
---------------------------------------- -}
// Now flush all code that depended on old class hierarchy.
// Note: must be done *after* linking k into the hierarchy (was bug 12/9/97)
// Also, first reinitialize vtable because it may have gotten out of synch
// while the new class wasn't connected to the class hierarchy.
Universe::flush_dependents_on(k);
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.