comparison src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @ 22895:f2e3f0e1f97d

8064473: Improved handling of age during object copy in G1 Reviewed-by: brutisso, tschatzl
author sfriberg
date Fri, 14 Nov 2014 15:03:39 +0100
parents 2af69bed8db6
children 80ac3ee51955
comparison
equal deleted inserted replaced
22894:2af69bed8db6 22895:f2e3f0e1f97d
4477 4477
4478 G1CollectedHeap::in_cset_state_t state = _g1->in_cset_state(obj); 4478 G1CollectedHeap::in_cset_state_t state = _g1->in_cset_state(obj);
4479 4479
4480 if (state == G1CollectedHeap::InCSet) { 4480 if (state == G1CollectedHeap::InCSet) {
4481 oop forwardee; 4481 oop forwardee;
4482 if (obj->is_forwarded()) { 4482 markOop m = obj->mark();
4483 forwardee = obj->forwardee(); 4483 if (m->is_marked()) {
4484 forwardee = (oop) m->decode_pointer();
4484 } else { 4485 } else {
4485 forwardee = _par_scan_state->copy_to_survivor_space(obj); 4486 forwardee = _par_scan_state->copy_to_survivor_space(obj, m);
4486 } 4487 }
4487 assert(forwardee != NULL, "forwardee should not be NULL"); 4488 assert(forwardee != NULL, "forwardee should not be NULL");
4488 oopDesc::encode_store_heap_oop(p, forwardee); 4489 oopDesc::encode_store_heap_oop(p, forwardee);
4489 if (do_mark_object != G1MarkNone && forwardee != obj) { 4490 if (do_mark_object != G1MarkNone && forwardee != obj) {
4490 // If the object is self-forwarded we don't need to explicitly 4491 // If the object is self-forwarded we don't need to explicitly