< prev index next >
src/share/vm/oops/instanceKlass.hpp
Print this page
@@ -146,11 +146,11 @@
// Annotations for this class
Annotations* _annotations;
// Package this class is defined in
PackageEntry* _package_entry;
// Array classes holding elements of this class.
- Klass* _array_klasses;
+ Klass* volatile _array_klasses;
// Constant pool for this class.
ConstantPool* _constants;
// The InnerClasses attribute and EnclosingMethod attribute. The
// _inner_classes is an array of shorts. If the class has InnerClasses
// attribute, then the _inner_classes array begins with 4-tuples of shorts
@@ -228,11 +228,11 @@
u2 _major_version; // major version number of class file
Thread* _init_thread; // Pointer to current thread doing initialization (to handle recusive initialization)
OopMapCache* volatile _oop_map_cache; // OopMapCache for all methods in the klass (allocated lazily)
MemberNameTable* _member_names; // Member names
JNIid* _jni_ids; // First JNI identifier for static fields in this class
- jmethodID* _methods_jmethod_ids; // jmethodIDs corresponding to method_idnum, or NULL if none
+ jmethodID* volatile _methods_jmethod_ids; // jmethodIDs corresponding to method_idnum, or NULL if none
intptr_t _dep_context; // packed DependencyContext structure
nmethod* _osr_nmethods_head; // Head of list of on-stack replacement nmethods for this class
#if INCLUDE_JVMTI
BreakpointInfo* _breakpoints; // bpt lists, managed by Method*
// Linked instanceKlasses of previous versions
@@ -366,11 +366,13 @@
int itable_length() const { return _itable_len; }
void set_itable_length(int len) { _itable_len = len; }
// array klasses
Klass* array_klasses() const { return _array_klasses; }
+ inline Klass* array_klasses_acquire() const; // load with acquire semantics
void set_array_klasses(Klass* k) { _array_klasses = k; }
+ inline void release_set_array_klasses(Klass* k); // store with release semantics
// methods
Array<Method*>* methods() const { return _methods; }
void set_methods(Array<Method*>* a) { _methods = a; }
Method* method_with_idnum(int idnum);
@@ -1236,14 +1238,12 @@
// The RedefineClasses() API can cause new method idnums to be needed
// which will cause the caches to grow. Safety requires different
// cache management logic if the caches can grow instead of just
// going from NULL to non-NULL.
bool idnum_can_increment() const { return has_been_redefined(); }
- jmethodID* methods_jmethod_ids_acquire() const
- { return (jmethodID*)OrderAccess::load_ptr_acquire(&_methods_jmethod_ids); }
- void release_set_methods_jmethod_ids(jmethodID* jmeths)
- { OrderAccess::release_store_ptr(&_methods_jmethod_ids, jmeths); }
+ inline jmethodID* methods_jmethod_ids_acquire() const;
+ inline void release_set_methods_jmethod_ids(jmethodID* jmeths);
// Lock during initialization
public:
// Lock for (1) initialization; (2) access to the ConstantPool of this class.
// Must be one per class and it has to be a VM internal object so java code
< prev index next >