void do_oop(oop* p) { ParallelScavengeHeap* psh = ParallelScavengeHeap::heap(); assert(!psh->is_in_reserved(p), "GC barrier needed"); if (PSScavenge::should_scavenge(p)) { assert(PSScavenge::should_scavenge(p, true), "revisiting object?"); oop o = *p; oop new_obj; if (o->is_forwarded()) { new_obj = o->forwardee(); } else { new_obj = _pm->copy_to_survivor_space</*promote_immediately=*/false>(o); } oopDesc::encode_store_heap_oop_not_null(p, new_obj); if (PSScavenge::is_obj_in_young(new_obj)) { do_klass_barrier(); } } }