--- old/src/hotspot/share/gc/parallel/psPromotionManager.cpp 2018-05-25 04:19:16.577304258 -0400 +++ new/src/hotspot/share/gc/parallel/psPromotionManager.cpp 2018-05-25 04:19:16.293289415 -0400 @@ -442,7 +442,7 @@ 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 { @@ -450,20 +450,10 @@ 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" - 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); + // Treat discovered as normal oop + T* discovered_addr = (T*)java_lang_ref_Reference::discovered_addr_raw(obj); + if (PSScavenge::should_scavenge(discovered_addr)) { + pm->claim_or_forward_depth(discovered_addr); } klass->InstanceKlass::oop_ps_push_contents(obj, pm); }