Top


定義場所(file name)

hotspot/src/share/vm/oops/oop.pcgc.inline.hpp

名前(function name)

inline void oopDesc::update_contents(ParCompactionManager* cm) {

本体部(body)

  {- -------------------------------------------
  (1) (変数宣言など)
      ---------------------------------------- -}

      // The klass field must be updated before anything else
      // can be done.
      DEBUG_ONLY(klassOopDesc* original_klass = klass());

  {- -------------------------------------------
  (1) もし GC によって対応する KlassOop の位置が移動している場合 
      (= PSParallelCompact::should_update_klass() が true の場合) には, 
      oopDesc::update_header() で KlassOop を指すポインタを修正しておく.
      ---------------------------------------- -}

      // Can the option to update and/or copy be moved up in the
      // call chain to avoid calling into here?

      if (PSParallelCompact::should_update_klass(klass())) {
        update_header();
        assert(klass()->is_klass(), "Not updated correctly");
      } else {
        assert(klass()->is_klass(), "Not updated");
      }

  {- -------------------------------------------
  (1) 対応する Klass オブジェクトの Klass::oop_update_pointers() を呼び出す.
      (ただし, プリミティブ型の配列(typeArrayKlass)の場合には, (ポインタを含んでいなくてすることがないので) この処理は省略)
      ---------------------------------------- -}

      Klass* new_klass = blueprint();
      if (!new_klass->oop_is_typeArray()) {
        // It might contain oops beyond the header, so take the virtual call.
        new_klass->oop_update_pointers(cm, this);
      }
      // Else skip it.  The typeArrayKlass in the header never needs scavenging.
    }

This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.