--- old/src/hotspot/share/oops/valueKlass.cpp 2020-02-21 02:14:38.706946961 -0800 +++ new/src/hotspot/share/oops/valueKlass.cpp 2020-02-21 02:14:37.998783292 -0800 @@ -139,10 +139,6 @@ return oop; } -bool ValueKlass::is_atomic() { - return (nonstatic_field_size() * heapOopSize) <= longSize; -} - int ValueKlass::nonstatic_oop_count() { int oops = 0; int map_count = nonstatic_oop_map_count(); @@ -195,6 +191,11 @@ return false; } + // Declared atomic but not naturally atomic. + if (is_declared_atomic() && !is_naturally_atomic()) { + return false; + } + return true; } @@ -253,7 +254,7 @@ } Klass* ValueKlass::allocate_value_array_klass(TRAPS) { - if (flatten_array() && (is_atomic() || (!ValueArrayAtomicAccess))) { + if (flatten_array() && (is_naturally_atomic() || (!ValueArrayAtomicAccess))) { return ValueArrayKlass::allocate_klass(ArrayStorageProperties::flattened_and_null_free, this, THREAD); } return ObjArrayKlass::allocate_objArray_klass(ArrayStorageProperties::null_free, 1, this, THREAD);