hotspot/src/share/vm/oops/instanceKlass.hpp
changeset 3820 0a8fbbe180db
parent 2570 ecc7862946d4
child 3821 847fddcb639b
equal deleted inserted replaced
3814:91f531a11872 3820:0a8fbbe180db
   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); }