1.1 --- a/src/share/vm/oops/instanceKlass.hpp Tue Sep 01 23:34:08 2009 -0700 1.2 +++ b/src/share/vm/oops/instanceKlass.hpp Fri Sep 04 12:53:02 2009 -0400 1.3 @@ -114,6 +114,15 @@ 1.4 initialization_error // error happened during initialization 1.5 }; 1.6 1.7 + // smaller footprint for boolean flags 1.8 + enum ClassFlags { 1.9 + _noflags = 0, // initial value 1.10 + _rewritten = 0x00000001U, // rewritten 1.11 + _should_verify = 0x00000002U, // defineClass specified conditional verification 1.12 + _has_nonstatic_fields = 0x00000004U, // for sizing with UseCompressedOops 1.13 + _is_marked_dependent = 0x00000008U // used for marking during flushing and deoptimization 1.14 + }; 1.15 + 1.16 public: 1.17 oop* oop_block_beg() const { return adr_array_klasses(); } 1.18 oop* oop_block_end() const { return adr_methods_default_annotations() + 1; } 1.19 @@ -192,9 +201,7 @@ 1.20 int _static_field_size; // number words used by static fields (oop and non-oop) in this klass 1.21 int _static_oop_field_size;// number of static oop fields in this klass 1.22 int _nonstatic_oop_map_size;// number of nonstatic oop-map blocks allocated at end of this klass 1.23 - bool _is_marked_dependent; // used for marking during flushing and deoptimization 1.24 - bool _rewritten; // methods rewritten. 1.25 - bool _has_nonstatic_fields; // for sizing with UseCompressedOops 1.26 + int _class_flags; // internal class state flags 1.27 u2 _minor_version; // minor version number of class file 1.28 u2 _major_version; // major version number of class file 1.29 ClassState _init_state; // state of class 1.30 @@ -230,8 +237,8 @@ 1.31 friend class SystemDictionary; 1.32 1.33 public: 1.34 - bool has_nonstatic_fields() const { return _has_nonstatic_fields; } 1.35 - void set_has_nonstatic_fields(bool b) { _has_nonstatic_fields = b; } 1.36 + bool has_nonstatic_fields() const { return (_class_flags & _has_nonstatic_fields) != 0; } 1.37 + void set_has_nonstatic_fields() { _class_flags |= _has_nonstatic_fields; } 1.38 1.39 // field sizes 1.40 int nonstatic_field_size() const { return _nonstatic_field_size; } 1.41 @@ -338,11 +345,16 @@ 1.42 bool is_in_error_state() const { return _init_state == initialization_error; } 1.43 bool is_reentrant_initialization(Thread *thread) { return thread == _init_thread; } 1.44 int get_init_state() { return _init_state; } // Useful for debugging 1.45 - bool is_rewritten() const { return _rewritten; } 1.46 + bool is_rewritten() const { return (_class_flags & _rewritten) != 0; } 1.47 + 1.48 + // defineClass specified verification 1.49 + bool should_verify_class() const { return (_class_flags & _should_verify) != 0; } 1.50 + void set_should_verify_class() { _class_flags |= _should_verify; } 1.51 1.52 // marking 1.53 - bool is_marked_dependent() const { return _is_marked_dependent; } 1.54 - void set_is_marked_dependent(bool value) { _is_marked_dependent = value; } 1.55 + bool is_marked_dependent() const { return (_class_flags & _is_marked_dependent) != 0; } 1.56 + void set_is_marked_dependent() { _class_flags |= _is_marked_dependent; } 1.57 + void clear_is_marked_dependent() { _class_flags &= ~_is_marked_dependent; } 1.58 1.59 // initialization (virtuals from Klass) 1.60 bool should_be_initialized() const; // means that initialize should be called 1.61 @@ -715,7 +727,8 @@ 1.62 #else 1.63 void set_init_state(ClassState state) { _init_state = state; } 1.64 #endif 1.65 - void set_rewritten() { _rewritten = true; } 1.66 + void clear_class_flags() { _class_flags = _noflags; } 1.67 + void set_rewritten() { _class_flags |= _rewritten; } 1.68 void set_init_thread(Thread *thread) { _init_thread = thread; } 1.69 1.70 u2 idnum_allocated_count() const { return _idnum_allocated_count; }