src/share/vm/oops/instanceKlass.hpp

changeset 1408
ad6585fd4087
parent 1161
be93aad57795
child 1409
26b774d693aa
     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; }

mercurial