comparison src/share/vm/oops/instanceKlass.hpp @ 973:ad6585fd4087

6830542: Performance: JVM_DefineClass already verified. Reviewed-by: kamg, phh
author acorn
date Fri, 04 Sep 2009 12:53:02 -0400
parents be93aad57795
children 26b774d693aa
comparison
equal deleted inserted replaced
967:6918603297f7 973:ad6585fd4087
111 linked, // successfully linked/verified (but not initialized yet) 111 linked, // successfully linked/verified (but not initialized yet)
112 being_initialized, // currently running class initializer 112 being_initialized, // currently running class initializer
113 fully_initialized, // initialized (successfull final state) 113 fully_initialized, // initialized (successfull final state)
114 initialization_error // error happened during initialization 114 initialization_error // error happened during initialization
115 }; 115 };
116
117 // smaller footprint for boolean flags
118 enum ClassFlags {
119 _noflags = 0, // initial value
120 _rewritten = 0x00000001U, // rewritten
121 _should_verify = 0x00000002U, // defineClass specified conditional verification
122 _has_nonstatic_fields = 0x00000004U, // for sizing with UseCompressedOops
123 _is_marked_dependent = 0x00000008U // used for marking during flushing and deoptimization
124 };
116 125
117 public: 126 public:
118 oop* oop_block_beg() const { return adr_array_klasses(); } 127 oop* oop_block_beg() const { return adr_array_klasses(); }
119 oop* oop_block_end() const { return adr_methods_default_annotations() + 1; } 128 oop* oop_block_end() const { return adr_methods_default_annotations() + 1; }
120 129
190 // (including inherited fields but after header_size()). 199 // (including inherited fields but after header_size()).
191 int _nonstatic_field_size; 200 int _nonstatic_field_size;
192 int _static_field_size; // number words used by static fields (oop and non-oop) in this klass 201 int _static_field_size; // number words used by static fields (oop and non-oop) in this klass
193 int _static_oop_field_size;// number of static oop fields in this klass 202 int _static_oop_field_size;// number of static oop fields in this klass
194 int _nonstatic_oop_map_size;// number of nonstatic oop-map blocks allocated at end of this klass 203 int _nonstatic_oop_map_size;// number of nonstatic oop-map blocks allocated at end of this klass
195 bool _is_marked_dependent; // used for marking during flushing and deoptimization 204 int _class_flags; // internal class state flags
196 bool _rewritten; // methods rewritten.
197 bool _has_nonstatic_fields; // for sizing with UseCompressedOops
198 u2 _minor_version; // minor version number of class file 205 u2 _minor_version; // minor version number of class file
199 u2 _major_version; // major version number of class file 206 u2 _major_version; // major version number of class file
200 ClassState _init_state; // state of class 207 ClassState _init_state; // state of class
201 Thread* _init_thread; // Pointer to current thread doing initialization (to handle recusive initialization) 208 Thread* _init_thread; // Pointer to current thread doing initialization (to handle recusive initialization)
202 int _vtable_len; // length of Java vtable (in words) 209 int _vtable_len; // length of Java vtable (in words)
228 235
229 friend class instanceKlassKlass; 236 friend class instanceKlassKlass;
230 friend class SystemDictionary; 237 friend class SystemDictionary;
231 238
232 public: 239 public:
233 bool has_nonstatic_fields() const { return _has_nonstatic_fields; } 240 bool has_nonstatic_fields() const { return (_class_flags & _has_nonstatic_fields) != 0; }
234 void set_has_nonstatic_fields(bool b) { _has_nonstatic_fields = b; } 241 void set_has_nonstatic_fields() { _class_flags |= _has_nonstatic_fields; }
235 242
236 // field sizes 243 // field sizes
237 int nonstatic_field_size() const { return _nonstatic_field_size; } 244 int nonstatic_field_size() const { return _nonstatic_field_size; }
238 void set_nonstatic_field_size(int size) { _nonstatic_field_size = size; } 245 void set_nonstatic_field_size(int size) { _nonstatic_field_size = size; }
239 246
336 bool is_not_initialized() const { return _init_state < being_initialized; } 343 bool is_not_initialized() const { return _init_state < being_initialized; }
337 bool is_being_initialized() const { return _init_state == being_initialized; } 344 bool is_being_initialized() const { return _init_state == being_initialized; }
338 bool is_in_error_state() const { return _init_state == initialization_error; } 345 bool is_in_error_state() const { return _init_state == initialization_error; }
339 bool is_reentrant_initialization(Thread *thread) { return thread == _init_thread; } 346 bool is_reentrant_initialization(Thread *thread) { return thread == _init_thread; }
340 int get_init_state() { return _init_state; } // Useful for debugging 347 int get_init_state() { return _init_state; } // Useful for debugging
341 bool is_rewritten() const { return _rewritten; } 348 bool is_rewritten() const { return (_class_flags & _rewritten) != 0; }
349
350 // defineClass specified verification
351 bool should_verify_class() const { return (_class_flags & _should_verify) != 0; }
352 void set_should_verify_class() { _class_flags |= _should_verify; }
342 353
343 // marking 354 // marking
344 bool is_marked_dependent() const { return _is_marked_dependent; } 355 bool is_marked_dependent() const { return (_class_flags & _is_marked_dependent) != 0; }
345 void set_is_marked_dependent(bool value) { _is_marked_dependent = value; } 356 void set_is_marked_dependent() { _class_flags |= _is_marked_dependent; }
357 void clear_is_marked_dependent() { _class_flags &= ~_is_marked_dependent; }
346 358
347 // initialization (virtuals from Klass) 359 // initialization (virtuals from Klass)
348 bool should_be_initialized() const; // means that initialize should be called 360 bool should_be_initialized() const; // means that initialize should be called
349 void initialize(TRAPS); 361 void initialize(TRAPS);
350 void link_class(TRAPS); 362 void link_class(TRAPS);
713 #ifdef ASSERT 725 #ifdef ASSERT
714 void set_init_state(ClassState state); 726 void set_init_state(ClassState state);
715 #else 727 #else
716 void set_init_state(ClassState state) { _init_state = state; } 728 void set_init_state(ClassState state) { _init_state = state; }
717 #endif 729 #endif
718 void set_rewritten() { _rewritten = true; } 730 void clear_class_flags() { _class_flags = _noflags; }
731 void set_rewritten() { _class_flags |= _rewritten; }
719 void set_init_thread(Thread *thread) { _init_thread = thread; } 732 void set_init_thread(Thread *thread) { _init_thread = thread; }
720 733
721 u2 idnum_allocated_count() const { return _idnum_allocated_count; } 734 u2 idnum_allocated_count() const { return _idnum_allocated_count; }
722 jmethodID* methods_jmethod_ids_acquire() const 735 jmethodID* methods_jmethod_ids_acquire() const
723 { return (jmethodID*)OrderAccess::load_ptr_acquire(&_methods_jmethod_ids); } 736 { return (jmethodID*)OrderAccess::load_ptr_acquire(&_methods_jmethod_ids); }