comparison src/share/vm/oops/instanceKlass.hpp @ 10343:6bd680e9ea35

8003421: NPG: Move oops out of InstanceKlass into mirror Summary: Inject protection_domain, signers, init_lock into java_lang_Class Reviewed-by: stefank, dholmes, sla
author coleenp
date Wed, 22 May 2013 14:37:49 -0400
parents 92ef81e2f571
children b7fa10a3a69a
comparison
equal deleted inserted replaced
10342:1a07e086ff28 10343:6bd680e9ea35
56 // [local interfaces ] 56 // [local interfaces ]
57 // [transitive interfaces ] 57 // [transitive interfaces ]
58 // [fields ] 58 // [fields ]
59 // [constants ] 59 // [constants ]
60 // [class loader ] 60 // [class loader ]
61 // [protection domain ]
62 // [signers ]
63 // [source file name ] 61 // [source file name ]
64 // [inner classes ] 62 // [inner classes ]
65 // [static field size ] 63 // [static field size ]
66 // [nonstatic field size ] 64 // [nonstatic field size ]
67 // [static oop fields size ] 65 // [static oop fields size ]
178 176
179 private: 177 private:
180 static volatile int _total_instanceKlass_count; 178 static volatile int _total_instanceKlass_count;
181 179
182 protected: 180 protected:
183 // Protection domain.
184 oop _protection_domain;
185 // Class signers.
186 objArrayOop _signers;
187 // Lock for (1) initialization; (2) access to the ConstantPool of this class.
188 // Must be one per class and it has to be a VM internal object so java code
189 // cannot lock it (like the mirror).
190 // It has to be an object not a Mutex because it's held through java calls.
191 volatile oop _init_lock;
192
193 // Annotations for this class 181 // Annotations for this class
194 Annotations* _annotations; 182 Annotations* _annotations;
195 // Array classes holding elements of this class. 183 // Array classes holding elements of this class.
196 Klass* _array_klasses; 184 Klass* _array_klasses;
197 // Constant pool for this class. 185 // Constant pool for this class.
525 // constant pool 513 // constant pool
526 ConstantPool* constants() const { return _constants; } 514 ConstantPool* constants() const { return _constants; }
527 void set_constants(ConstantPool* c) { _constants = c; } 515 void set_constants(ConstantPool* c) { _constants = c; }
528 516
529 // protection domain 517 // protection domain
530 oop protection_domain() { return _protection_domain; } 518 oop protection_domain() const;
531 void set_protection_domain(oop pd) { klass_oop_store(&_protection_domain, pd); } 519
520 // signers
521 objArrayOop signers() const;
532 522
533 // host class 523 // host class
534 Klass* host_klass() const { 524 Klass* host_klass() const {
535 Klass** hk = (Klass**)adr_host_klass(); 525 Klass** hk = (Klass**)adr_host_klass();
536 if (hk == NULL) { 526 if (hk == NULL) {
572 _misc_flags |= _misc_is_contended; 562 _misc_flags |= _misc_is_contended;
573 } else { 563 } else {
574 _misc_flags &= ~_misc_is_contended; 564 _misc_flags &= ~_misc_is_contended;
575 } 565 }
576 } 566 }
577
578 // signers
579 objArrayOop signers() const { return _signers; }
580 void set_signers(objArrayOop s) { klass_oop_store((oop*)&_signers, s); }
581 567
582 // source file name 568 // source file name
583 Symbol* source_file_name() const { return _source_file_name; } 569 Symbol* source_file_name() const { return _source_file_name; }
584 void set_source_file_name(Symbol* n); 570 void set_source_file_name(Symbol* n);
585 571
910 inline Method* method_at_vtable(int index); 896 inline Method* method_at_vtable(int index);
911 klassItable* itable() const; // return new klassItable wrapper 897 klassItable* itable() const; // return new klassItable wrapper
912 Method* method_at_itable(Klass* holder, int index, TRAPS); 898 Method* method_at_itable(Klass* holder, int index, TRAPS);
913 899
914 // Garbage collection 900 // Garbage collection
915 virtual void oops_do(OopClosure* cl);
916
917 void oop_follow_contents(oop obj); 901 void oop_follow_contents(oop obj);
918 int oop_adjust_pointers(oop obj); 902 int oop_adjust_pointers(oop obj);
919 903
920 void clean_implementors_list(BoolObjectClosure* is_alive); 904 void clean_implementors_list(BoolObjectClosure* is_alive);
921 void clean_method_data(BoolObjectClosure* is_alive); 905 void clean_method_data(BoolObjectClosure* is_alive);
997 void release_set_methods_cached_itable_indices(int* indices) 981 void release_set_methods_cached_itable_indices(int* indices)
998 { OrderAccess::release_store_ptr(&_methods_cached_itable_indices, indices); } 982 { OrderAccess::release_store_ptr(&_methods_cached_itable_indices, indices); }
999 983
1000 // Lock during initialization 984 // Lock during initialization
1001 public: 985 public:
1002 volatile oop init_lock() const {return _init_lock; } 986 // Lock for (1) initialization; (2) access to the ConstantPool of this class.
987 // Must be one per class and it has to be a VM internal object so java code
988 // cannot lock it (like the mirror).
989 // It has to be an object not a Mutex because it's held through java calls.
990 volatile oop init_lock() const;
1003 private: 991 private:
1004 void set_init_lock(oop value) { klass_oop_store(&_init_lock, value); }
1005
1006 // Offsets for memory management
1007 oop* adr_protection_domain() const { return (oop*)&this->_protection_domain;}
1008 oop* adr_signers() const { return (oop*)&this->_signers;}
1009 oop* adr_init_lock() const { return (oop*)&this->_init_lock;}
1010 992
1011 // Static methods that are used to implement member methods where an exposed this pointer 993 // Static methods that are used to implement member methods where an exposed this pointer
1012 // is needed due to possible GCs 994 // is needed due to possible GCs
1013 static bool link_class_impl (instanceKlassHandle this_oop, bool throw_verifyerror, TRAPS); 995 static bool link_class_impl (instanceKlassHandle this_oop, bool throw_verifyerror, TRAPS);
1014 static bool verify_code (instanceKlassHandle this_oop, bool throw_verifyerror, TRAPS); 996 static bool verify_code (instanceKlassHandle this_oop, bool throw_verifyerror, TRAPS);