101 int size() const { return ArrayKlass::static_size(header_size()); } |
100 int size() const { return ArrayKlass::static_size(header_size()); } |
102 |
101 |
103 // Initialization (virtual from Klass) |
102 // Initialization (virtual from Klass) |
104 void initialize(TRAPS); |
103 void initialize(TRAPS); |
105 |
104 |
106 // Garbage collection |
105 // GC specific object visitors |
107 void oop_follow_contents(oop obj); |
106 // |
108 inline void oop_follow_contents(oop obj, int index); |
107 // Mark Sweep |
109 template <class T> inline void objarray_follow_contents(oop obj, int index); |
108 void oop_ms_follow_contents(oop obj); |
110 |
109 int oop_ms_adjust_pointers(oop obj); |
111 int oop_adjust_pointers(oop obj); |
|
112 |
|
113 // Parallel Scavenge and Parallel Old |
|
114 PARALLEL_GC_DECLS |
|
115 #if INCLUDE_ALL_GCS |
110 #if INCLUDE_ALL_GCS |
116 inline void oop_follow_contents(ParCompactionManager* cm, oop obj, int index); |
111 // Parallel Scavenge |
117 template <class T> inline void |
112 void oop_ps_push_contents( oop obj, PSPromotionManager* pm); |
118 objarray_follow_contents(ParCompactionManager* cm, oop obj, int index); |
113 // Parallel Compact |
119 #endif // INCLUDE_ALL_GCS |
114 void oop_pc_follow_contents(oop obj, ParCompactionManager* cm); |
120 |
115 void oop_pc_update_pointers(oop obj); |
121 // Iterators |
116 #endif |
122 int oop_oop_iterate(oop obj, ExtendedOopClosure* blk) { |
117 |
123 return oop_oop_iterate_v(obj, blk); |
118 // Oop fields (and metadata) iterators |
124 } |
119 // [nv = true] Use non-virtual calls to do_oop_nv. |
125 int oop_oop_iterate_m(oop obj, ExtendedOopClosure* blk, MemRegion mr) { |
120 // [nv = false] Use virtual calls to do_oop. |
126 return oop_oop_iterate_v_m(obj, blk, mr); |
121 // |
127 } |
122 // The ObjArrayKlass iterators also visits the Object's klass. |
|
123 |
|
124 private: |
|
125 |
|
126 // Iterate over oop elements and metadata. |
|
127 template <bool nv, typename OopClosureType> |
|
128 inline int oop_oop_iterate(oop obj, OopClosureType* closure); |
|
129 |
|
130 // Iterate over oop elements within mr, and metadata. |
|
131 template <bool nv, typename OopClosureType> |
|
132 inline int oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr); |
|
133 |
|
134 // Iterate over oop elements with indices within [start, end), and metadata. |
|
135 template <bool nv, class OopClosureType> |
|
136 inline int oop_oop_iterate_range(oop obj, OopClosureType* closure, int start, int end); |
|
137 |
|
138 // Iterate over oop elements within [start, end), and metadata. |
|
139 // Specialized for [T = oop] or [T = narrowOop]. |
|
140 template <bool nv, typename T, class OopClosureType> |
|
141 inline void oop_oop_iterate_range_specialized(objArrayOop a, OopClosureType* closure, int start, int end); |
|
142 |
|
143 public: |
|
144 // Iterate over all oop elements. |
|
145 template <bool nv, class OopClosureType> |
|
146 inline void oop_oop_iterate_elements(objArrayOop a, OopClosureType* closure); |
|
147 |
|
148 private: |
|
149 // Iterate over all oop elements. |
|
150 // Specialized for [T = oop] or [T = narrowOop]. |
|
151 template <bool nv, typename T, class OopClosureType> |
|
152 inline void oop_oop_iterate_elements_specialized(objArrayOop a, OopClosureType* closure); |
|
153 |
|
154 // Iterate over all oop elements with indices within mr. |
|
155 template <bool nv, class OopClosureType> |
|
156 inline void oop_oop_iterate_elements_bounded(objArrayOop a, OopClosureType* closure, MemRegion mr); |
|
157 |
|
158 // Iterate over oop elements within [low, high).. |
|
159 // Specialized for [T = oop] or [T = narrowOop]. |
|
160 template <bool nv, typename T, class OopClosureType> |
|
161 inline void oop_oop_iterate_elements_specialized_bounded(objArrayOop a, OopClosureType* closure, void* low, void* high); |
|
162 |
|
163 |
|
164 public: |
|
165 |
128 #define ObjArrayKlass_OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ |
166 #define ObjArrayKlass_OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ |
129 int oop_oop_iterate##nv_suffix(oop obj, OopClosureType* blk); \ |
167 int oop_oop_iterate##nv_suffix(oop obj, OopClosureType* blk); \ |
130 int oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* blk, \ |
168 int oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* blk, \ |
131 MemRegion mr); \ |
169 MemRegion mr); \ |
132 int oop_oop_iterate_range##nv_suffix(oop obj, OopClosureType* blk, \ |
170 int oop_oop_iterate_range##nv_suffix(oop obj, OopClosureType* blk, \ |
133 int start, int end); |
171 int start, int end); |
134 |
172 |
135 ALL_OOP_OOP_ITERATE_CLOSURES_1(ObjArrayKlass_OOP_OOP_ITERATE_DECL) |
173 ALL_OOP_OOP_ITERATE_CLOSURES_1(ObjArrayKlass_OOP_OOP_ITERATE_DECL) |
136 ALL_OOP_OOP_ITERATE_CLOSURES_2(ObjArrayKlass_OOP_OOP_ITERATE_DECL) |
174 ALL_OOP_OOP_ITERATE_CLOSURES_2(ObjArrayKlass_OOP_OOP_ITERATE_DECL) |
137 |
175 |
|
176 #if INCLUDE_ALL_GCS |
|
177 #define ObjArrayKlass_OOP_OOP_ITERATE_BACKWARDS_DECL(OopClosureType, nv_suffix) \ |
|
178 int oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* blk); |
|
179 |
|
180 ALL_OOP_OOP_ITERATE_CLOSURES_1(ObjArrayKlass_OOP_OOP_ITERATE_BACKWARDS_DECL) |
|
181 ALL_OOP_OOP_ITERATE_CLOSURES_2(ObjArrayKlass_OOP_OOP_ITERATE_BACKWARDS_DECL) |
|
182 #endif // INCLUDE_ALL_GCS |
|
183 |
138 // JVM support |
184 // JVM support |
139 jint compute_modifier_flags(TRAPS) const; |
185 jint compute_modifier_flags(TRAPS) const; |
140 |
186 |
141 public: |
187 public: |
142 // Printing |
188 // Printing |