< 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 >