hotspot/src/share/vm/oops/instanceKlass.hpp
changeset 3822 388b0393a042
parent 3821 847fddcb639b
child 3824 86e9e4b25bdf
equal deleted inserted replaced
3821:847fddcb639b 3822:388b0393a042
   133     linked,                             // successfully linked/verified (but not initialized yet)
   133     linked,                             // successfully linked/verified (but not initialized yet)
   134     being_initialized,                  // currently running class initializer
   134     being_initialized,                  // currently running class initializer
   135     fully_initialized,                  // initialized (successfull final state)
   135     fully_initialized,                  // initialized (successfull final state)
   136     initialization_error                // error happened during initialization
   136     initialization_error                // error happened during initialization
   137   };
   137   };
   138 
       
   139   // smaller footprint for boolean flags
       
   140   enum ClassFlags {
       
   141     _noflags           = 0,             // initial value
       
   142     _rewritten         = 0x00000001U,   // rewritten
       
   143     _should_verify     = 0x00000002U,   // defineClass specified conditional verification
       
   144     _has_nonstatic_fields = 0x00000004U, // for sizing with UseCompressedOops
       
   145     _is_marked_dependent = 0x00000008U  // used for marking during flushing and deoptimization
       
   146    };
       
   147 
   138 
   148  public:
   139  public:
   149   oop* oop_block_beg() const { return adr_array_klasses(); }
   140   oop* oop_block_beg() const { return adr_array_klasses(); }
   150   oop* oop_block_end() const { return adr_methods_default_annotations() + 1; }
   141   oop* oop_block_end() const { return adr_methods_default_annotations() + 1; }
   151 
   142 
   221   // (including inherited fields but after header_size()).
   212   // (including inherited fields but after header_size()).
   222   int             _nonstatic_field_size;
   213   int             _nonstatic_field_size;
   223   int             _static_field_size;    // number words used by static fields (oop and non-oop) in this klass
   214   int             _static_field_size;    // number words used by static fields (oop and non-oop) in this klass
   224   int             _static_oop_field_size;// number of static oop fields in this klass
   215   int             _static_oop_field_size;// number of static oop fields in this klass
   225   int             _nonstatic_oop_map_size;// size in words of nonstatic oop map blocks
   216   int             _nonstatic_oop_map_size;// size in words of nonstatic oop map blocks
   226   int             _class_flags;          // internal class state flags
   217   bool            _is_marked_dependent;  // used for marking during flushing and deoptimization
       
   218   bool            _rewritten;            // methods rewritten.
       
   219   bool            _has_nonstatic_fields; // for sizing with UseCompressedOops
       
   220   bool            _should_verify_class;  // allow caching of preverification
   227   u2              _minor_version;        // minor version number of class file
   221   u2              _minor_version;        // minor version number of class file
   228   u2              _major_version;        // major version number of class file
   222   u2              _major_version;        // major version number of class file
   229   ClassState      _init_state;           // state of class
   223   ClassState      _init_state;           // state of class
   230   Thread*         _init_thread;          // Pointer to current thread doing initialization (to handle recusive initialization)
   224   Thread*         _init_thread;          // Pointer to current thread doing initialization (to handle recusive initialization)
   231   int             _vtable_len;           // length of Java vtable (in words)
   225   int             _vtable_len;           // length of Java vtable (in words)
   257 
   251 
   258   friend class instanceKlassKlass;
   252   friend class instanceKlassKlass;
   259   friend class SystemDictionary;
   253   friend class SystemDictionary;
   260 
   254 
   261  public:
   255  public:
   262   bool has_nonstatic_fields() const        { return (_class_flags & _has_nonstatic_fields) != 0; }
   256   bool has_nonstatic_fields() const        { return _has_nonstatic_fields; }
   263   void set_has_nonstatic_fields()          { _class_flags |= _has_nonstatic_fields; }
   257   void set_has_nonstatic_fields(bool b)    { _has_nonstatic_fields = b; }
   264 
   258 
   265   // field sizes
   259   // field sizes
   266   int nonstatic_field_size() const         { return _nonstatic_field_size; }
   260   int nonstatic_field_size() const         { return _nonstatic_field_size; }
   267   void set_nonstatic_field_size(int size)  { _nonstatic_field_size = size; }
   261   void set_nonstatic_field_size(int size)  { _nonstatic_field_size = size; }
   268 
   262 
   365   bool is_not_initialized() const          { return _init_state <  being_initialized; }
   359   bool is_not_initialized() const          { return _init_state <  being_initialized; }
   366   bool is_being_initialized() const        { return _init_state == being_initialized; }
   360   bool is_being_initialized() const        { return _init_state == being_initialized; }
   367   bool is_in_error_state() const           { return _init_state == initialization_error; }
   361   bool is_in_error_state() const           { return _init_state == initialization_error; }
   368   bool is_reentrant_initialization(Thread *thread)  { return thread == _init_thread; }
   362   bool is_reentrant_initialization(Thread *thread)  { return thread == _init_thread; }
   369   int  get_init_state()                    { return _init_state; } // Useful for debugging
   363   int  get_init_state()                    { return _init_state; } // Useful for debugging
   370   bool is_rewritten() const                { return (_class_flags & _rewritten) != 0; }
   364   bool is_rewritten() const                { return _rewritten; }
   371 
   365 
   372   // defineClass specified verification
   366   // defineClass specified verification
   373   bool should_verify_class() const         { return (_class_flags & _should_verify) != 0; }
   367   bool should_verify_class() const         { return _should_verify_class; }
   374   void set_should_verify_class()           { _class_flags |= _should_verify; }
   368   void set_should_verify_class(bool value) { _should_verify_class = value; }
   375 
   369 
   376   // marking
   370   // marking
   377   bool is_marked_dependent() const         { return (_class_flags & _is_marked_dependent) != 0; }
   371   bool is_marked_dependent() const         { return _is_marked_dependent; }
   378   void set_is_marked_dependent()           { _class_flags |= _is_marked_dependent; }
   372   void set_is_marked_dependent(bool value) { _is_marked_dependent = value; }
   379   void clear_is_marked_dependent()         { _class_flags &= ~_is_marked_dependent; }
       
   380 
   373 
   381   // initialization (virtuals from Klass)
   374   // initialization (virtuals from Klass)
   382   bool should_be_initialized() const;  // means that initialize should be called
   375   bool should_be_initialized() const;  // means that initialize should be called
   383   void initialize(TRAPS);
   376   void initialize(TRAPS);
   384   void link_class(TRAPS);
   377   void link_class(TRAPS);
   755 #ifdef ASSERT
   748 #ifdef ASSERT
   756   void set_init_state(ClassState state);
   749   void set_init_state(ClassState state);
   757 #else
   750 #else
   758   void set_init_state(ClassState state) { _init_state = state; }
   751   void set_init_state(ClassState state) { _init_state = state; }
   759 #endif
   752 #endif
   760   void clear_class_flags()              { _class_flags = _noflags; }
   753   void set_rewritten()                  { _rewritten = true; }
   761   void set_rewritten()                  { _class_flags |= _rewritten; }
       
   762   void set_init_thread(Thread *thread)  { _init_thread = thread; }
   754   void set_init_thread(Thread *thread)  { _init_thread = thread; }
   763 
   755 
   764   u2 idnum_allocated_count() const      { return _idnum_allocated_count; }
   756   u2 idnum_allocated_count() const      { return _idnum_allocated_count; }
   765   jmethodID* methods_jmethod_ids_acquire() const
   757   jmethodID* methods_jmethod_ids_acquire() const
   766          { return (jmethodID*)OrderAccess::load_ptr_acquire(&_methods_jmethod_ids); }
   758          { return (jmethodID*)OrderAccess::load_ptr_acquire(&_methods_jmethod_ids); }