< prev index next >

src/hotspot/share/oops/instanceKlass.hpp

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

*** 289,299 **** _misc_is_shared_app_class = 1 << 15, // defining class loader is app class loader _misc_has_resolved_methods = 1 << 16, // resolved methods table entries added for this class _misc_is_being_redefined = 1 << 17, // used for locking redefinition _misc_has_contended_annotations = 1 << 18, // has @Contended annotation _misc_has_value_fields = 1 << 19, // has value fields and related embedded section is not empty ! _misc_is_empty_value = 1 << 20 // empty value type }; u2 loader_type_bits() { return _misc_is_shared_boot_class|_misc_is_shared_platform_class|_misc_is_shared_app_class; } u4 _misc_flags; --- 289,301 ---- _misc_is_shared_app_class = 1 << 15, // defining class loader is app class loader _misc_has_resolved_methods = 1 << 16, // resolved methods table entries added for this class _misc_is_being_redefined = 1 << 17, // used for locking redefinition _misc_has_contended_annotations = 1 << 18, // has @Contended annotation _misc_has_value_fields = 1 << 19, // has value fields and related embedded section is not empty ! _misc_is_empty_value = 1 << 20, // empty value type ! _misc_is_naturally_atomic = 1 << 21, // loaded/stored in one instruction ! _misc_is_declared_atomic = 1 << 22 // implements jl.NonTearable }; u2 loader_type_bits() { return _misc_is_shared_boot_class|_misc_is_shared_platform_class|_misc_is_shared_app_class; } u4 _misc_flags;
*** 430,439 **** --- 432,467 ---- } void set_is_empty_value() { _misc_flags |= _misc_is_empty_value; } + // Note: The naturally_atomic property only applies to + // inline classes; it is never true on identity classes. + // The bit is placed on instanceKlass for convenience. + + // Query if h/w provides atomic load/store for instances. + bool is_naturally_atomic() const { + return (_misc_flags & _misc_is_naturally_atomic) != 0; + } + // Initialized in the class file parser, not changed later. + void set_is_naturally_atomic() { + _misc_flags |= _misc_is_naturally_atomic; + } + + // Query if this class implements jl.NonTearable or was + // mentioned in the JVM option AlwaysAtomicValueTypes. + // This bit can occur anywhere, but is only significant + // for inline classes *and* their super types. + // It inherits from supers along with NonTearable. + bool is_declared_atomic() const { + return (_misc_flags & _misc_is_declared_atomic) != 0; + } + // Initialized in the class file parser, not changed later. + void set_is_declared_atomic() { + _misc_flags |= _misc_is_declared_atomic; + } + // field sizes int nonstatic_field_size() const { return _nonstatic_field_size; } void set_nonstatic_field_size(int size) { _nonstatic_field_size = size; } int static_field_size() const { return _static_field_size; }
< prev index next >