--- old/src/hotspot/share/oops/instanceKlass.cpp 2019-03-27 16:10:37.507155287 +0100 +++ new/src/hotspot/share/oops/instanceKlass.cpp 2019-03-27 16:10:37.207150323 +0100 @@ -1398,7 +1398,8 @@ } } -Klass* InstanceKlass::array_klass_impl(bool or_null, int n, TRAPS) { +Klass* InstanceKlass::array_klass_impl(ArrayStorageProperties storage_props, bool or_null, int n, TRAPS) { + assert(!storage_props.is_flattened(), "Can't be flattened"); // Need load-acquire for lock-free read if (array_klasses_acquire() == NULL) { if (or_null) return NULL; @@ -1411,7 +1412,7 @@ // Check if update has already taken place if (array_klasses() == NULL) { - Klass* k = ObjArrayKlass::allocate_objArray_klass(class_loader_data(), 1, this, CHECK_NULL); + Klass* k = ObjArrayKlass::allocate_objArray_klass(storage_props, 1, this, CHECK_NULL); // use 'release' to pair with lock-free load release_set_array_klasses(k); } @@ -1420,13 +1421,13 @@ // _this will always be set at this point ObjArrayKlass* oak = (ObjArrayKlass*)array_klasses(); if (or_null) { - return oak->array_klass_or_null(n); + return oak->array_klass_or_null(storage_props, n); } - return oak->array_klass(n, THREAD); + return oak->array_klass(storage_props, n, THREAD); } -Klass* InstanceKlass::array_klass_impl(bool or_null, TRAPS) { - return array_klass_impl(or_null, 1, THREAD); +Klass* InstanceKlass::array_klass_impl(ArrayStorageProperties storage_props, bool or_null, TRAPS) { + return array_klass_impl(storage_props, or_null, 1, THREAD); } static int call_class_initializer_counter = 0; // for debugging @@ -1651,11 +1652,6 @@ } -void InstanceKlass::array_klasses_do(void f(Klass* k, TRAPS), TRAPS) { - if (array_klasses() != NULL) - ArrayKlass::cast(array_klasses())->array_klasses_do(f, THREAD); -} - void InstanceKlass::array_klasses_do(void f(Klass* k)) { if (array_klasses() != NULL) ArrayKlass::cast(array_klasses())->array_klasses_do(f);