--- old/src/hotspot/share/oops/objArrayKlass.cpp	2019-05-29 12:29:25.273331365 +0200
+++ new/src/hotspot/share/oops/objArrayKlass.cpp	2019-05-29 12:29:24.909324901 +0200
@@ -163,12 +163,14 @@
 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);
@@ -217,7 +219,7 @@
 }
 
 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.