< prev index next >

src/hotspot/share/gc/parallel/psPromotionManager.cpp

Print this page
rev 50093 : [mq]: pp2_work

*** 440,472 **** 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 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" 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) { --- 440,462 ---- 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 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 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); } void InstanceRefKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) { if (UseCompressedOops) {
< prev index next >