hotspot/src/share/vm/oops/objArrayKlass.cpp
objArrayOop objArrayKlass::allocate(int length, TRAPS) {
{- -------------------------------------------
(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.