Top


定義場所(file name)

hotspot/src/share/vm/classfile/systemDictionary.cpp

説明(description)

// ----------------------------------------------------------------------------
// 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.

名前(function name)

void SystemDictionary::add_to_hierarchy(instanceKlassHandle k, TRAPS) {

本体部(body)

  {- -------------------------------------------
  (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.