inline void PSPromotionManager::claim_or_forward_internal_breadth(T* p) { if (p != NULL) { // XXX: error if p != NULL here oop o = oopDesc::load_decode_heap_oop_not_null(p); if (o->is_forwarded()) { o = o->forwardee(); } else { o = copy_to_survivor_space(o, false); } // Card mark if (PSScavenge::is_obj_in_young((HeapWord*) o)) { PSScavenge::card_table()->inline_write_ref_field_gc(p, o); } oopDesc::encode_store_heap_oop_not_null(p, o); } }
inline void PSPromotionManager::claim_or_forward_internal_breadth(heapRef* p) { if (p != NULL) { objectRef pref=ALWAYS_UNPOISON_OBJECTREF(*p); oop o = pref.as_oop(); heapRef fref = o->is_forwarded() ? (heapRef)o->forwarded_ref() : copy_to_survivor_space(o, false, p); // Card mark if(fref.is_new()){ PSScavenge::card_table()->inline_write_ref_field_gc(p,fref.as_oop()); } POISON_AND_STORE_REF(p,fref); } }