Top


定義場所(file name)

hotspot/src/share/vm/memory/generation.cpp

説明(description)

// Ignores "ref" and calls allocate().

名前(function name)

oop Generation::promote(oop obj, size_t obj_size) {

本体部(body)

  {- -------------------------------------------
  (1) (assert)
      ---------------------------------------- -}

      assert(obj_size == (size_t)obj->size(), "bad obj_size passed in");

  {- -------------------------------------------
  (1) (デバッグ用の処理) (#ifndef PRODUCT 時にのみ実行)
      ---------------------------------------- -}

    #ifndef PRODUCT
      if (Universe::heap()->promotion_should_fail()) {
        return NULL;
      }
    #endif  // #ifndef PRODUCT

  {- -------------------------------------------
  (1) Generation::allocate() を呼んで, メモリを確保する.
      (このメソッドはサブクラスでオーバーライドされているため, 実際に呼ばれるメソッドはクラス毎に異なる)
      ---------------------------------------- -}

      HeapWord* result = allocate(obj_size, false);

  {- -------------------------------------------
  (1) メモリ確保に成功していれば, オブジェクトをコピーした後, コピー先をリターンする.
      逆に確保が失敗していたら, GenCollectedHeap::handle_failed_promotion() を呼び出して, 結果をリターン.
      ---------------------------------------- -}

      if (result != NULL) {
        Copy::aligned_disjoint_words((HeapWord*)obj, result, obj_size);
        return oop(result);
      } else {
        GenCollectedHeap* gch = GenCollectedHeap::heap();
        return gch->handle_failed_promotion(this, obj, obj_size);
      }
    }

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