hotspot/src/share/vm/oops/arrayKlass.hpp
changeset 13952 e3cf184080bc
parent 13728 882756847a04
child 15437 eabd4555d072
equal deleted inserted replaced
13918:b01a48301e67 13952:e3cf184080bc
    28 #include "memory/universe.hpp"
    28 #include "memory/universe.hpp"
    29 #include "oops/klass.hpp"
    29 #include "oops/klass.hpp"
    30 
    30 
    31 class klassVtable;
    31 class klassVtable;
    32 
    32 
    33 // arrayKlass is the abstract baseclass for all array classes
    33 // ArrayKlass is the abstract baseclass for all array classes
    34 
    34 
    35 class arrayKlass: public Klass {
    35 class ArrayKlass: public Klass {
    36   friend class VMStructs;
    36   friend class VMStructs;
    37  private:
    37  private:
    38   int      _dimension;         // This is n'th-dimensional array.
    38   int      _dimension;         // This is n'th-dimensional array.
    39   Klass* volatile _higher_dimension;  // Refers the (n+1)'th-dimensional array (if present).
    39   Klass* volatile _higher_dimension;  // Refers the (n+1)'th-dimensional array (if present).
    40   Klass* volatile _lower_dimension;   // Refers the (n-1)'th-dimensional array (if present).
    40   Klass* volatile _lower_dimension;   // Refers the (n-1)'th-dimensional array (if present).
    44 
    44 
    45  protected:
    45  protected:
    46   // Constructors
    46   // Constructors
    47   // The constructor with the Symbol argument does the real array
    47   // The constructor with the Symbol argument does the real array
    48   // initialization, the other is a dummy
    48   // initialization, the other is a dummy
    49   arrayKlass(Symbol* name);
    49   ArrayKlass(Symbol* name);
    50   arrayKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for cds"); }
    50   ArrayKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for cds"); }
    51 
    51 
    52  public:
    52  public:
    53   // Testing operation
    53   // Testing operation
    54   bool oop_is_array_slow() const { return true; }
    54   bool oop_is_array_slow() const { return true; }
    55 
    55 
    78   oop  component_mirror() const         { return _component_mirror; }
    78   oop  component_mirror() const         { return _component_mirror; }
    79   void set_component_mirror(oop m)      { klass_oop_store(&_component_mirror, m); }
    79   void set_component_mirror(oop m)      { klass_oop_store(&_component_mirror, m); }
    80   oop* adr_component_mirror()           { return (oop*)&this->_component_mirror;}
    80   oop* adr_component_mirror()           { return (oop*)&this->_component_mirror;}
    81 
    81 
    82   // Compiler/Interpreter offset
    82   // Compiler/Interpreter offset
    83   static ByteSize component_mirror_offset() { return in_ByteSize(offset_of(arrayKlass, _component_mirror)); }
    83   static ByteSize component_mirror_offset() { return in_ByteSize(offset_of(ArrayKlass, _component_mirror)); }
    84 
    84 
    85   virtual Klass* java_super() const;//{ return SystemDictionary::Object_klass(); }
    85   virtual Klass* java_super() const;//{ return SystemDictionary::Object_klass(); }
    86 
    86 
    87   // Allocation
    87   // Allocation
    88   // Sizes points to the first dimension of the array, subsequent dimensions
    88   // Sizes points to the first dimension of the array, subsequent dimensions
    92 
    92 
    93   // Lookup operations
    93   // Lookup operations
    94   Method* uncached_lookup_method(Symbol* name, Symbol* signature) const;
    94   Method* uncached_lookup_method(Symbol* name, Symbol* signature) const;
    95 
    95 
    96   // Casting from Klass*
    96   // Casting from Klass*
    97   static arrayKlass* cast(Klass* k) {
    97   static ArrayKlass* cast(Klass* k) {
    98     assert(k->oop_is_array(), "cast to arrayKlass");
    98     assert(k->oop_is_array(), "cast to ArrayKlass");
    99     return (arrayKlass*) k;
    99     return (ArrayKlass*) k;
   100   }
   100   }
   101 
   101 
   102   GrowableArray<Klass*>* compute_secondary_supers(int num_extra_slots);
   102   GrowableArray<Klass*>* compute_secondary_supers(int num_extra_slots);
   103   bool compute_is_subtype_of(Klass* k);
   103   bool compute_is_subtype_of(Klass* k);
   104 
   104 
   105   // Sizing
   105   // Sizing
   106   static int header_size()                 { return sizeof(arrayKlass)/HeapWordSize; }
   106   static int header_size()                 { return sizeof(ArrayKlass)/HeapWordSize; }
   107   static int static_size(int header_size);
   107   static int static_size(int header_size);
   108 
   108 
   109   // Java vtable
   109   // Java vtable
   110   klassVtable* vtable() const;             // return new klassVtable
   110   klassVtable* vtable() const;             // return new klassVtable
   111   int  vtable_length() const               { return _vtable_len; }
   111   int  vtable_length() const               { return _vtable_len; }
   122 
   122 
   123   // GC support
   123   // GC support
   124   virtual void oops_do(OopClosure* cl);
   124   virtual void oops_do(OopClosure* cl);
   125 
   125 
   126   // Return a handle.
   126   // Return a handle.
   127   static void     complete_create_array_klass(arrayKlass* k, KlassHandle super_klass, TRAPS);
   127   static void     complete_create_array_klass(ArrayKlass* k, KlassHandle super_klass, TRAPS);
   128 
   128 
   129 
   129 
   130   // jvm support
   130   // jvm support
   131   jint compute_modifier_flags(TRAPS) const;
   131   jint compute_modifier_flags(TRAPS) const;
   132 
   132