hotspot/src/share/vm/oops/klass.hpp
changeset 8076 96d498ec7ae1
parent 7397 5b173b4ca846
child 8725 8c1e3dd5fe1b
equal deleted inserted replaced
8075:582dd25571b2 8076:96d498ec7ae1
   210   //
   210   //
   211   // Where to look to observe a supertype (it is &_secondary_super_cache for
   211   // Where to look to observe a supertype (it is &_secondary_super_cache for
   212   // secondary supers, else is &_primary_supers[depth()].
   212   // secondary supers, else is &_primary_supers[depth()].
   213   juint       _super_check_offset;
   213   juint       _super_check_offset;
   214 
   214 
       
   215   // Class name.  Instance classes: java/lang/String, etc.  Array classes: [I,
       
   216   // [Ljava/lang/String;, etc.  Set to zero for all other kinds of classes.
       
   217   Symbol*     _name;
       
   218 
   215  public:
   219  public:
   216   oop* oop_block_beg() const { return adr_secondary_super_cache(); }
   220   oop* oop_block_beg() const { return adr_secondary_super_cache(); }
   217   oop* oop_block_end() const { return adr_next_sibling() + 1; }
   221   oop* oop_block_end() const { return adr_next_sibling() + 1; }
   218 
   222 
   219  protected:
   223  protected:
   233   klassOop    _primary_supers[_primary_super_limit];
   237   klassOop    _primary_supers[_primary_super_limit];
   234   // java/lang/Class instance mirroring this class
   238   // java/lang/Class instance mirroring this class
   235   oop       _java_mirror;
   239   oop       _java_mirror;
   236   // Superclass
   240   // Superclass
   237   klassOop  _super;
   241   klassOop  _super;
   238   // Class name.  Instance classes: java/lang/String, etc.  Array classes: [I,
       
   239   // [Ljava/lang/String;, etc.  Set to zero for all other kinds of classes.
       
   240   symbolOop _name;
       
   241   // First subclass (NULL if none); _subklass->next_sibling() is next one
   242   // First subclass (NULL if none); _subklass->next_sibling() is next one
   242   klassOop _subklass;
   243   klassOop _subklass;
   243   // Sibling link (or NULL); links all subklasses of a klass
   244   // Sibling link (or NULL); links all subklasses of a klass
   244   klassOop _next_sibling;
   245   klassOop _next_sibling;
   245 
   246 
   359   oop* adr_super()           const { return (oop*)&_super;             }
   360   oop* adr_super()           const { return (oop*)&_super;             }
   360   oop* adr_primary_supers()  const { return (oop*)&_primary_supers[0]; }
   361   oop* adr_primary_supers()  const { return (oop*)&_primary_supers[0]; }
   361   oop* adr_secondary_super_cache() const { return (oop*)&_secondary_super_cache; }
   362   oop* adr_secondary_super_cache() const { return (oop*)&_secondary_super_cache; }
   362   oop* adr_secondary_supers()const { return (oop*)&_secondary_supers;  }
   363   oop* adr_secondary_supers()const { return (oop*)&_secondary_supers;  }
   363   oop* adr_java_mirror()     const { return (oop*)&_java_mirror;       }
   364   oop* adr_java_mirror()     const { return (oop*)&_java_mirror;       }
   364   oop* adr_name()            const { return (oop*)&_name;              }
       
   365   oop* adr_subklass()        const { return (oop*)&_subklass;          }
   365   oop* adr_subklass()        const { return (oop*)&_subklass;          }
   366   oop* adr_next_sibling()    const { return (oop*)&_next_sibling;      }
   366   oop* adr_next_sibling()    const { return (oop*)&_next_sibling;      }
   367 
   367 
   368  public:
   368  public:
   369   // Allocation profiling support
   369   // Allocation profiling support
   509   virtual bool should_be_initialized() const    { return false; }
   509   virtual bool should_be_initialized() const    { return false; }
   510   // initializes the klass
   510   // initializes the klass
   511   virtual void initialize(TRAPS);
   511   virtual void initialize(TRAPS);
   512   // lookup operation for MethodLookupCache
   512   // lookup operation for MethodLookupCache
   513   friend class MethodLookupCache;
   513   friend class MethodLookupCache;
   514   virtual methodOop uncached_lookup_method(symbolOop name, symbolOop signature) const;
   514   virtual methodOop uncached_lookup_method(Symbol* name, Symbol* signature) const;
   515  public:
   515  public:
   516   methodOop lookup_method(symbolOop name, symbolOop signature) const {
   516   methodOop lookup_method(Symbol* name, Symbol* signature) const {
   517     return uncached_lookup_method(name, signature);
   517     return uncached_lookup_method(name, signature);
   518   }
   518   }
   519 
   519 
   520   // array class with specific rank
   520   // array class with specific rank
   521   klassOop array_klass(int rank, TRAPS)         {  return array_klass_impl(false, rank, THREAD); }
   521   klassOop array_klass(int rank, TRAPS)         {  return array_klass_impl(false, rank, THREAD); }
   535   virtual klassOop array_klass_impl(bool or_null, int rank, TRAPS);
   535   virtual klassOop array_klass_impl(bool or_null, int rank, TRAPS);
   536   virtual klassOop array_klass_impl(bool or_null, TRAPS);
   536   virtual klassOop array_klass_impl(bool or_null, TRAPS);
   537 
   537 
   538  public:
   538  public:
   539   virtual void remove_unshareable_info();
   539   virtual void remove_unshareable_info();
       
   540   virtual void shared_symbols_iterate(SymbolClosure* closure);
   540 
   541 
   541  protected:
   542  protected:
   542   // computes the subtype relationship
   543   // computes the subtype relationship
   543   virtual bool compute_is_subtype_of(klassOop k);
   544   virtual bool compute_is_subtype_of(klassOop k);
   544  public:
   545  public:
   577   // type testing operations
   578   // type testing operations
   578   virtual bool oop_is_instance_slow()       const { return false; }
   579   virtual bool oop_is_instance_slow()       const { return false; }
   579   virtual bool oop_is_instanceRef()         const { return false; }
   580   virtual bool oop_is_instanceRef()         const { return false; }
   580   virtual bool oop_is_array()               const { return false; }
   581   virtual bool oop_is_array()               const { return false; }
   581   virtual bool oop_is_objArray_slow()       const { return false; }
   582   virtual bool oop_is_objArray_slow()       const { return false; }
   582   virtual bool oop_is_symbol()              const { return false; }
       
   583   virtual bool oop_is_klass()               const { return false; }
   583   virtual bool oop_is_klass()               const { return false; }
   584   virtual bool oop_is_thread()              const { return false; }
   584   virtual bool oop_is_thread()              const { return false; }
   585   virtual bool oop_is_method()              const { return false; }
   585   virtual bool oop_is_method()              const { return false; }
   586   virtual bool oop_is_constMethod()         const { return false; }
   586   virtual bool oop_is_constMethod()         const { return false; }
   587   virtual bool oop_is_methodData()          const { return false; }
   587   virtual bool oop_is_methodData()          const { return false; }
   779   // Return self, except for abstract classes with exactly 1
   779   // Return self, except for abstract classes with exactly 1
   780   // implementor.  Then return the 1 concrete implementation.
   780   // implementor.  Then return the 1 concrete implementation.
   781   Klass *up_cast_abstract();
   781   Klass *up_cast_abstract();
   782 
   782 
   783   // klass name
   783   // klass name
   784   symbolOop name() const                   { return _name; }
   784   Symbol* name() const                   { return _name; }
   785   void set_name(symbolOop n)               { oop_store_without_check((oop*) &_name, (oop) n); }
   785   void set_name(Symbol* n);
   786 
   786 
   787   friend class klassKlass;
   787   friend class klassKlass;
   788 
   788 
   789  public:
   789  public:
   790   // jvm support
   790   // jvm support