Mercurial > hg > truffle
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); } |