comparison src/share/vm/oops/instanceKlass.hpp @ 975:83c29a26f67c

6879572: SA fails _is_marked_dependent not found Reviewed-by: kamg, dcubed
author acorn
date Wed, 16 Sep 2009 15:42:46 -0400
parents 26b774d693aa
children 74a5db69c1fe
comparison
equal deleted inserted replaced
974:26b774d693aa 975:83c29a26f67c
133 linked, // successfully linked/verified (but not initialized yet) 133 linked, // successfully linked/verified (but not initialized yet)
134 being_initialized, // currently running class initializer 134 being_initialized, // currently running class initializer
135 fully_initialized, // initialized (successfull final state) 135 fully_initialized, // initialized (successfull final state)
136 initialization_error // error happened during initialization 136 initialization_error // error happened during initialization
137 }; 137 };
138
139 // smaller footprint for boolean flags
140 enum ClassFlags {
141 _noflags = 0, // initial value
142 _rewritten = 0x00000001U, // rewritten
143 _should_verify = 0x00000002U, // defineClass specified conditional verification
144 _has_nonstatic_fields = 0x00000004U, // for sizing with UseCompressedOops
145 _is_marked_dependent = 0x00000008U // used for marking during flushing and deoptimization
146 };
147 138
148 public: 139 public:
149 oop* oop_block_beg() const { return adr_array_klasses(); } 140 oop* oop_block_beg() const { return adr_array_klasses(); }
150 oop* oop_block_end() const { return adr_methods_default_annotations() + 1; } 141 oop* oop_block_end() const { return adr_methods_default_annotations() + 1; }
151 142
221 // (including inherited fields but after header_size()). 212 // (including inherited fields but after header_size()).
222 int _nonstatic_field_size; 213 int _nonstatic_field_size;
223 int _static_field_size; // number words used by static fields (oop and non-oop) in this klass 214 int _static_field_size; // number words used by static fields (oop and non-oop) in this klass
224 int _static_oop_field_size;// number of static oop fields in this klass 215 int _static_oop_field_size;// number of static oop fields in this klass
225 int _nonstatic_oop_map_size;// size in words of nonstatic oop map blocks 216 int _nonstatic_oop_map_size;// size in words of nonstatic oop map blocks
226 int _class_flags; // internal class state flags 217 bool _is_marked_dependent; // used for marking during flushing and deoptimization
218 bool _rewritten; // methods rewritten.
219 bool _has_nonstatic_fields; // for sizing with UseCompressedOops
220 bool _should_verify_class; // allow caching of preverification
227 u2 _minor_version; // minor version number of class file 221 u2 _minor_version; // minor version number of class file
228 u2 _major_version; // major version number of class file 222 u2 _major_version; // major version number of class file
229 ClassState _init_state; // state of class 223 ClassState _init_state; // state of class
230 Thread* _init_thread; // Pointer to current thread doing initialization (to handle recusive initialization) 224 Thread* _init_thread; // Pointer to current thread doing initialization (to handle recusive initialization)
231 int _vtable_len; // length of Java vtable (in words) 225 int _vtable_len; // length of Java vtable (in words)
257 251
258 friend class instanceKlassKlass; 252 friend class instanceKlassKlass;
259 friend class SystemDictionary; 253 friend class SystemDictionary;
260 254
261 public: 255 public:
262 bool has_nonstatic_fields() const { return (_class_flags & _has_nonstatic_fields) != 0; } 256 bool has_nonstatic_fields() const { return _has_nonstatic_fields; }
263 void set_has_nonstatic_fields() { _class_flags |= _has_nonstatic_fields; } 257 void set_has_nonstatic_fields(bool b) { _has_nonstatic_fields = b; }
264 258
265 // field sizes 259 // field sizes
266 int nonstatic_field_size() const { return _nonstatic_field_size; } 260 int nonstatic_field_size() const { return _nonstatic_field_size; }
267 void set_nonstatic_field_size(int size) { _nonstatic_field_size = size; } 261 void set_nonstatic_field_size(int size) { _nonstatic_field_size = size; }
268 262
365 bool is_not_initialized() const { return _init_state < being_initialized; } 359 bool is_not_initialized() const { return _init_state < being_initialized; }
366 bool is_being_initialized() const { return _init_state == being_initialized; } 360 bool is_being_initialized() const { return _init_state == being_initialized; }
367 bool is_in_error_state() const { return _init_state == initialization_error; } 361 bool is_in_error_state() const { return _init_state == initialization_error; }
368 bool is_reentrant_initialization(Thread *thread) { return thread == _init_thread; } 362 bool is_reentrant_initialization(Thread *thread) { return thread == _init_thread; }
369 int get_init_state() { return _init_state; } // Useful for debugging 363 int get_init_state() { return _init_state; } // Useful for debugging
370 bool is_rewritten() const { return (_class_flags & _rewritten) != 0; } 364 bool is_rewritten() const { return _rewritten; }
371 365
372 // defineClass specified verification 366 // defineClass specified verification
373 bool should_verify_class() const { return (_class_flags & _should_verify) != 0; } 367 bool should_verify_class() const { return _should_verify_class; }
374 void set_should_verify_class() { _class_flags |= _should_verify; } 368 void set_should_verify_class(bool value) { _should_verify_class = value; }
375 369
376 // marking 370 // marking
377 bool is_marked_dependent() const { return (_class_flags & _is_marked_dependent) != 0; } 371 bool is_marked_dependent() const { return _is_marked_dependent; }
378 void set_is_marked_dependent() { _class_flags |= _is_marked_dependent; } 372 void set_is_marked_dependent(bool value) { _is_marked_dependent = value; }
379 void clear_is_marked_dependent() { _class_flags &= ~_is_marked_dependent; }
380 373
381 // initialization (virtuals from Klass) 374 // initialization (virtuals from Klass)
382 bool should_be_initialized() const; // means that initialize should be called 375 bool should_be_initialized() const; // means that initialize should be called
383 void initialize(TRAPS); 376 void initialize(TRAPS);
384 void link_class(TRAPS); 377 void link_class(TRAPS);
755 #ifdef ASSERT 748 #ifdef ASSERT
756 void set_init_state(ClassState state); 749 void set_init_state(ClassState state);
757 #else 750 #else
758 void set_init_state(ClassState state) { _init_state = state; } 751 void set_init_state(ClassState state) { _init_state = state; }
759 #endif 752 #endif
760 void clear_class_flags() { _class_flags = _noflags; } 753 void set_rewritten() { _rewritten = true; }
761 void set_rewritten() { _class_flags |= _rewritten; }
762 void set_init_thread(Thread *thread) { _init_thread = thread; } 754 void set_init_thread(Thread *thread) { _init_thread = thread; }
763 755
764 u2 idnum_allocated_count() const { return _idnum_allocated_count; } 756 u2 idnum_allocated_count() const { return _idnum_allocated_count; }
765 jmethodID* methods_jmethod_ids_acquire() const 757 jmethodID* methods_jmethod_ids_acquire() const
766 { return (jmethodID*)OrderAccess::load_ptr_acquire(&_methods_jmethod_ids); } 758 { return (jmethodID*)OrderAccess::load_ptr_acquire(&_methods_jmethod_ids); }