Top


定義場所(file name)

hotspot/src/share/vm/oops/objArrayKlass.cpp

名前(function name)

objArrayOop objArrayKlass::allocate(int length, TRAPS) {

本体部(body)

  {- -------------------------------------------
  (1) もし指定された配列長(上記の length)が 0 以上の値で, かつ
      可能な最大長以下であれば(= length が arrayOopDesc::max_array_length() 以下であれば), 
      CollectedHeap::array_allocate() でメモリを確保し, リターンする.
      ---------------------------------------- -}

      if (length >= 0) {
        if (length <= arrayOopDesc::max_array_length(T_OBJECT)) {
          int size = objArrayOopDesc::object_size(length);
          KlassHandle h_k(THREAD, as_klassOop());
          objArrayOop a = (objArrayOop)CollectedHeap::array_allocate(h_k, size, length, CHECK_NULL);
          assert(a->is_parsable(), "Can't publish unless parsable");
          return a;

  {- -------------------------------------------
  (1) もし指定された配列長が 0 以上だが最大長を超えていれば, OutOfMemoryError.
      ---------------------------------------- -}

        } else {
          report_java_out_of_memory("Requested array size exceeds VM limit");
          THROW_OOP_0(Universe::out_of_memory_error_array_size());
        }

  {- -------------------------------------------
  (1) もし指定された配列長が負値であれば, java_lang_NegativeArraySizeException.
      ---------------------------------------- -}

      } else {
        THROW_0(vmSymbols::java_lang_NegativeArraySizeException());
      }
    }

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