102 virtual Klass* array_klass_impl(bool or_null, TRAPS);
103
104 public:
105
106 static ObjArrayKlass* cast(Klass* k) {
107 return const_cast<ObjArrayKlass*>(cast(const_cast<const Klass*>(k)));
108 }
109
110 static const ObjArrayKlass* cast(const Klass* k) {
111 assert(k->is_objArray_klass(), "cast to ObjArrayKlass");
112 return static_cast<const ObjArrayKlass*>(k);
113 }
114
115 // Sizing
116 static int header_size() { return sizeof(ObjArrayKlass)/wordSize; }
117 int size() const { return ArrayKlass::static_size(header_size()); }
118
119 // Initialization (virtual from Klass)
120 void initialize(TRAPS);
121
122 // GC specific object visitors
123 //
124 #if INCLUDE_PARALLELGC
125 // Parallel Compact
126 void oop_pc_update_pointers(oop obj, ParCompactionManager* cm);
127 #endif
128
129 // Oop fields (and metadata) iterators
130 //
131 // The ObjArrayKlass iterators also visits the Object's klass.
132
133 // Iterate over oop elements and metadata.
134 template <typename T, typename OopClosureType>
135 inline void oop_oop_iterate(oop obj, OopClosureType* closure);
136
137 // Iterate over oop elements and metadata.
138 template <typename T, typename OopClosureType>
139 inline void oop_oop_iterate_reverse(oop obj, OopClosureType* closure);
140
141 // Iterate over oop elements within mr, and metadata.
142 template <typename T, typename OopClosureType>
143 inline void oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr);
144
145 // Iterate over oop elements within [start, end), and metadata.
146 template <typename T, class OopClosureType>
147 inline void oop_oop_iterate_range(objArrayOop a, OopClosureType* closure, int start, int end);
|
102 virtual Klass* array_klass_impl(bool or_null, TRAPS);
103
104 public:
105
106 static ObjArrayKlass* cast(Klass* k) {
107 return const_cast<ObjArrayKlass*>(cast(const_cast<const Klass*>(k)));
108 }
109
110 static const ObjArrayKlass* cast(const Klass* k) {
111 assert(k->is_objArray_klass(), "cast to ObjArrayKlass");
112 return static_cast<const ObjArrayKlass*>(k);
113 }
114
115 // Sizing
116 static int header_size() { return sizeof(ObjArrayKlass)/wordSize; }
117 int size() const { return ArrayKlass::static_size(header_size()); }
118
119 // Initialization (virtual from Klass)
120 void initialize(TRAPS);
121
122 // Oop fields (and metadata) iterators
123 //
124 // The ObjArrayKlass iterators also visits the Object's klass.
125
126 // Iterate over oop elements and metadata.
127 template <typename T, typename OopClosureType>
128 inline void oop_oop_iterate(oop obj, OopClosureType* closure);
129
130 // Iterate over oop elements and metadata.
131 template <typename T, typename OopClosureType>
132 inline void oop_oop_iterate_reverse(oop obj, OopClosureType* closure);
133
134 // Iterate over oop elements within mr, and metadata.
135 template <typename T, typename OopClosureType>
136 inline void oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr);
137
138 // Iterate over oop elements within [start, end), and metadata.
139 template <typename T, class OopClosureType>
140 inline void oop_oop_iterate_range(objArrayOop a, OopClosureType* closure, int start, int end);
|