< prev index next >
src/hotspot/share/gc/parallel/psPromotionManager.cpp
Print this page
rev 50107 : [mq]: pp2_work
@@ -440,33 +440,23 @@
static void oop_ps_push_contents_specialized(oop obj, InstanceRefKlass *klass, PSPromotionManager* pm) {
T* referent_addr = (T*)java_lang_ref_Reference::referent_addr_raw(obj);
if (PSScavenge::should_scavenge(referent_addr)) {
ReferenceProcessor* rp = PSScavenge::reference_processor();
if (rp->discover_reference(obj, klass->reference_type())) {
- // reference already enqueued, referent and next will be traversed later
+ // reference discovered, referent will be traversed later.
klass->InstanceKlass::oop_ps_push_contents(obj, pm);
return;
} else {
// treat referent as normal oop
pm->claim_or_forward_depth(referent_addr);
}
}
- // Treat discovered as normal oop, if ref is not "active",
- // i.e. if next is non-NULL.
- T* next_addr = (T*)java_lang_ref_Reference::next_addr_raw(obj);
- T next_oop = RawAccess<>::oop_load(next_addr);
- if (!CompressedOops::is_null(next_oop)) { // i.e. ref is not "active"
+ // Treat discovered as normal oop
T* discovered_addr = (T*)java_lang_ref_Reference::discovered_addr_raw(obj);
- log_develop_trace(gc, ref)(" Process discovered as normal " PTR_FORMAT, p2i(discovered_addr));
if (PSScavenge::should_scavenge(discovered_addr)) {
pm->claim_or_forward_depth(discovered_addr);
}
- }
- // Treat next as normal oop; next is a link in the reference queue.
- if (PSScavenge::should_scavenge(next_addr)) {
- pm->claim_or_forward_depth(next_addr);
- }
klass->InstanceKlass::oop_ps_push_contents(obj, pm);
}
void InstanceRefKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) {
if (UseCompressedOops) {
< prev index next >