< 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 >