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, |