< prev index next >

src/hotspot/share/oops/valueKlass.cpp

Print this page
rev 59083 : DRAFT 8236522: NonTearable marker interface for inline classes to enforce atomicity

*** 137,150 **** instanceOop oop = (instanceOop)Universe::heap()->obj_buffer_allocate(this, size, CHECK_NULL); assert(oop->mark().is_always_locked(), "Unlocked value type"); 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(); OopMapBlock* block = start_of_nonstatic_oop_maps(); OopMapBlock* end = block + map_count; --- 137,146 ----
*** 193,202 **** --- 189,203 ---- // Too many embedded oops if ((ValueArrayElemMaxFlatOops >= 0) && (nonstatic_oop_count() > ValueArrayElemMaxFlatOops)) { return false; } + // Declared atomic but not naturally atomic. + if (is_declared_atomic() && !is_naturally_atomic()) { + return false; + } + return true; } void ValueKlass::remove_unshareable_info() { InstanceKlass::remove_unshareable_info();
*** 251,261 **** } return vak->array_klass(storage_props, rank, THREAD); } Klass* ValueKlass::allocate_value_array_klass(TRAPS) { ! if (flatten_array() && (is_atomic() || (!ValueArrayAtomicAccess))) { return ValueArrayKlass::allocate_klass(ArrayStorageProperties::flattened_and_null_free, this, THREAD); } return ObjArrayKlass::allocate_objArray_klass(ArrayStorageProperties::null_free, 1, this, THREAD); } --- 252,262 ---- } return vak->array_klass(storage_props, rank, THREAD); } Klass* ValueKlass::allocate_value_array_klass(TRAPS) { ! 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); }
< prev index next >