< prev index next > src/hotspot/share/oops/arrayKlass.hpp
Print this page
int _dimension; // This is n'th-dimensional array.
ObjArrayKlass* volatile _higher_dimension; // Refers the (n+1)'th-dimensional array (if present).
ArrayKlass* volatile _lower_dimension; // Refers the (n-1)'th-dimensional array (if present).
protected:
+ Klass* _element_klass; // The klass of the elements of this array type
+ // The element type must be registered for both object arrays
+ // (incl. object arrays with value type elements) and value type
+ // arrays containing flat value types. However, the element
+ // type must not be registered for arrays of primitive types.
+ // TODO: Update the class hierarchy so that element klass appears
+ // only in array that contain non-primitive types.
// Constructors
// The constructor with the Symbol argument does the real array
// initialization, the other is a dummy
ArrayKlass(Symbol* name, KlassKind kind);
ArrayKlass();
+ // Create array_name for element klass
+ static Symbol* create_element_klass_array_name(Klass* element_klass, TRAPS);
+
public:
+ // Instance variables
+ virtual Klass* element_klass() const { return _element_klass; }
+ virtual void set_element_klass(Klass* k) { _element_klass = k; }
+
+ // Compiler/Interpreter offset
+ static ByteSize element_klass_offset() { return in_ByteSize(offset_of(ArrayKlass, _element_klass)); }
+
+ // Are loads and stores to this concrete array type atomic?
+ // Note that Object[] is naturally atomic, but its subtypes may not be.
+ virtual bool element_access_is_atomic() { return true; }
+
// Testing operation
DEBUG_ONLY(bool is_array_klass_slow() const { return true; })
// Returns the ObjArrayKlass for n'th dimension.
ArrayKlass* array_klass(int n, TRAPS);
}
GrowableArray<Klass*>* compute_secondary_supers(int num_extra_slots,
Array<InstanceKlass*>* transitive_interfaces);
+ oop component_mirror() const;
+
// Sizing
static int static_size(int header_size);
virtual void metaspace_pointers_do(MetaspaceClosure* iter);
< prev index next >