< prev index next >
src/hotspot/share/oops/objArrayKlass.cpp
Print this page
@@ -161,16 +161,18 @@
}
objArrayOop ObjArrayKlass::allocate(int length, TRAPS) {
check_array_allocation_length(length, arrayOopDesc::max_array_length(T_OBJECT), CHECK_0);
int size = objArrayOopDesc::object_size(length);
- bool populate_null_free = storage_properties().is_null_free() && (dimension() == 1);
+ bool populate_null_free = storage_properties().is_null_free();
objArrayOop array = (objArrayOop)Universe::heap()->array_allocate(this, size, length,
/* do_zero */ true, THREAD);
if (populate_null_free) {
+ assert(dimension() == 1, "Can only populate the final dimension");
assert(element_klass()->is_value(), "Unexpected");
assert(!element_klass()->is_array_klass(), "ArrayKlass unexpected here");
+ assert(!ValueKlass::cast(element_klass())->flatten_array(), "Expected valueArrayOop allocation");
element_klass()->initialize(CHECK_NULL);
// Populate default values...
objArrayHandle array_h(THREAD, array);
instanceOop value = (instanceOop) ValueKlass::cast(element_klass())->default_value();
for (int i = 0; i < length; i++) {
@@ -215,11 +217,11 @@
}
return h_array();
}
ArrayStorageProperties ObjArrayKlass::storage_properties() {
- return name()->is_Q_array_signature() ? ArrayStorageProperties::null_free : ArrayStorageProperties::empty;
+ return name()->is_Q_singledim_array_signature() ? ArrayStorageProperties::null_free : ArrayStorageProperties::empty;
}
// Either oop or narrowOop depending on UseCompressedOops.
void ObjArrayKlass::do_copy(arrayOop s, size_t src_offset,
arrayOop d, size_t dst_offset, int length, TRAPS) {
< prev index next >