154 template <typename T> bool operator()(T* p) const { return _mr.contains(p); }
155 };
156
157 template <bool nv, class OopClosureType>
158 void InstanceRefKlass::oop_oop_iterate_ref_processing_bounded(oop obj, OopClosureType* closure, MemRegion mr) {
159 const MrContains contains(mr);
160 if (UseCompressedOops) {
161 oop_oop_iterate_ref_processing_specialized<nv, narrowOop>(obj, closure, contains);
162 } else {
163 oop_oop_iterate_ref_processing_specialized<nv, oop>(obj, closure, contains);
164 }
165 }
166
167 template <bool nv, class OopClosureType>
168 void InstanceRefKlass::oop_oop_iterate(oop obj, OopClosureType* closure) {
169 InstanceKlass::oop_oop_iterate<nv>(obj, closure);
170
171 oop_oop_iterate_ref_processing<nv>(obj, closure);
172 }
173
174 #if INCLUDE_ALL_GCS
175 template <bool nv, class OopClosureType>
176 void InstanceRefKlass::oop_oop_iterate_reverse(oop obj, OopClosureType* closure) {
177 InstanceKlass::oop_oop_iterate_reverse<nv>(obj, closure);
178
179 oop_oop_iterate_ref_processing<nv>(obj, closure);
180 }
181 #endif // INCLUDE_ALL_GCS
182
183
184 template <bool nv, class OopClosureType>
185 void InstanceRefKlass::oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr) {
186 InstanceKlass::oop_oop_iterate_bounded<nv>(obj, closure, mr);
187
188 oop_oop_iterate_ref_processing_bounded<nv>(obj, closure, mr);
189 }
190
191 #ifdef ASSERT
192 template <typename T>
193 void InstanceRefKlass::trace_reference_gc(const char *s, oop obj) {
194 T* referent_addr = (T*) java_lang_ref_Reference::referent_addr_raw(obj);
195 T* next_addr = (T*) java_lang_ref_Reference::next_addr_raw(obj);
196 T* discovered_addr = (T*) java_lang_ref_Reference::discovered_addr_raw(obj);
197
198 log_develop_trace(gc, ref)("InstanceRefKlass %s for obj " PTR_FORMAT, s, p2i(obj));
199 log_develop_trace(gc, ref)(" referent_addr/* " PTR_FORMAT " / " PTR_FORMAT,
200 p2i(referent_addr), p2i(referent_addr ? RawAccess<>::oop_load(referent_addr) : (oop)NULL));
201 log_develop_trace(gc, ref)(" next_addr/* " PTR_FORMAT " / " PTR_FORMAT,
|
154 template <typename T> bool operator()(T* p) const { return _mr.contains(p); }
155 };
156
157 template <bool nv, class OopClosureType>
158 void InstanceRefKlass::oop_oop_iterate_ref_processing_bounded(oop obj, OopClosureType* closure, MemRegion mr) {
159 const MrContains contains(mr);
160 if (UseCompressedOops) {
161 oop_oop_iterate_ref_processing_specialized<nv, narrowOop>(obj, closure, contains);
162 } else {
163 oop_oop_iterate_ref_processing_specialized<nv, oop>(obj, closure, contains);
164 }
165 }
166
167 template <bool nv, class OopClosureType>
168 void InstanceRefKlass::oop_oop_iterate(oop obj, OopClosureType* closure) {
169 InstanceKlass::oop_oop_iterate<nv>(obj, closure);
170
171 oop_oop_iterate_ref_processing<nv>(obj, closure);
172 }
173
174 #if INCLUDE_OOP_OOP_ITERATE_BACKWARDS
175 template <bool nv, class OopClosureType>
176 void InstanceRefKlass::oop_oop_iterate_reverse(oop obj, OopClosureType* closure) {
177 InstanceKlass::oop_oop_iterate_reverse<nv>(obj, closure);
178
179 oop_oop_iterate_ref_processing<nv>(obj, closure);
180 }
181 #endif // INCLUDE_OOP_OOP_ITERATE_BACKWARDS
182
183
184 template <bool nv, class OopClosureType>
185 void InstanceRefKlass::oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr) {
186 InstanceKlass::oop_oop_iterate_bounded<nv>(obj, closure, mr);
187
188 oop_oop_iterate_ref_processing_bounded<nv>(obj, closure, mr);
189 }
190
191 #ifdef ASSERT
192 template <typename T>
193 void InstanceRefKlass::trace_reference_gc(const char *s, oop obj) {
194 T* referent_addr = (T*) java_lang_ref_Reference::referent_addr_raw(obj);
195 T* next_addr = (T*) java_lang_ref_Reference::next_addr_raw(obj);
196 T* discovered_addr = (T*) java_lang_ref_Reference::discovered_addr_raw(obj);
197
198 log_develop_trace(gc, ref)("InstanceRefKlass %s for obj " PTR_FORMAT, s, p2i(obj));
199 log_develop_trace(gc, ref)(" referent_addr/* " PTR_FORMAT " / " PTR_FORMAT,
200 p2i(referent_addr), p2i(referent_addr ? RawAccess<>::oop_load(referent_addr) : (oop)NULL));
201 log_develop_trace(gc, ref)(" next_addr/* " PTR_FORMAT " / " PTR_FORMAT,
|