< prev index next >
src/hotspot/share/oops/instanceRefKlass.inline.hpp
Print this page
rev 50107 : [mq]: pp2_work
@@ -44,18 +44,10 @@
Devirtualizer<nv>::do_oop(closure, referent_addr);
}
}
template <bool nv, typename T, class OopClosureType, class Contains>
-void InstanceRefKlass::do_next(oop obj, OopClosureType* closure, Contains& contains) {
- T* next_addr = (T*)java_lang_ref_Reference::next_addr_raw(obj);
- if (contains(next_addr)) {
- Devirtualizer<nv>::do_oop(closure, next_addr);
- }
-}
-
-template <bool nv, typename T, class OopClosureType, class Contains>
void InstanceRefKlass::do_discovered(oop obj, OopClosureType* closure, Contains& contains) {
T* discovered_addr = (T*)java_lang_ref_Reference::discovered_addr_raw(obj);
if (contains(discovered_addr)) {
Devirtualizer<nv>::do_oop(closure, discovered_addr);
}
@@ -82,28 +74,19 @@
// Try to discover reference and return if it succeeds.
if (try_discover<T>(obj, type, closure)) {
return;
}
- // Treat referent as normal oop.
+ // Treat referent and discovered as normal oops.
do_referent<nv, T>(obj, closure, contains);
-
- // Treat discovered as normal oop, if ref is not "active" (next non-NULL).
- T next_oop = RawAccess<>::oop_load((T*)java_lang_ref_Reference::next_addr_raw(obj));
- if (!CompressedOops::is_null(next_oop)) {
do_discovered<nv, T>(obj, closure, contains);
- }
-
- // Treat next as normal oop.
- do_next<nv, T>(obj, closure, contains);
}
template <bool nv, typename T, class OopClosureType, class Contains>
void InstanceRefKlass::oop_oop_iterate_fields(oop obj, OopClosureType* closure, Contains& contains) {
do_referent<nv, T>(obj, closure, contains);
do_discovered<nv, T>(obj, closure, contains);
- do_next<nv, T>(obj, closure, contains);
}
template <bool nv, typename T, class OopClosureType, class Contains>
void InstanceRefKlass::oop_oop_iterate_discovered_and_discovery(oop obj, ReferenceType type, OopClosureType* closure, Contains& contains) {
// Explicitly apply closure to the discovered field.
@@ -190,18 +173,15 @@
#ifdef ASSERT
template <typename T>
void InstanceRefKlass::trace_reference_gc(const char *s, oop obj) {
T* referent_addr = (T*) java_lang_ref_Reference::referent_addr_raw(obj);
- T* next_addr = (T*) java_lang_ref_Reference::next_addr_raw(obj);
T* discovered_addr = (T*) java_lang_ref_Reference::discovered_addr_raw(obj);
log_develop_trace(gc, ref)("InstanceRefKlass %s for obj " PTR_FORMAT, s, p2i(obj));
log_develop_trace(gc, ref)(" referent_addr/* " PTR_FORMAT " / " PTR_FORMAT,
p2i(referent_addr), p2i(referent_addr ? RawAccess<>::oop_load(referent_addr) : (oop)NULL));
- log_develop_trace(gc, ref)(" next_addr/* " PTR_FORMAT " / " PTR_FORMAT,
- p2i(next_addr), p2i(next_addr ? RawAccess<>::oop_load(next_addr) : (oop)NULL));
log_develop_trace(gc, ref)(" discovered_addr/* " PTR_FORMAT " / " PTR_FORMAT,
p2i(discovered_addr), p2i(discovered_addr ? RawAccess<>::oop_load(discovered_addr) : (oop)NULL));
}
#endif
< prev index next >