39 // than one thread might claim the same card. So the same card may be |
39 // than one thread might claim the same card. So the same card may be |
40 // processed multiple times. So redo this check. |
40 // processed multiple times. So redo this check. |
41 G1CollectedHeap::in_cset_state_t in_cset_state = _g1h->in_cset_state(obj); |
41 G1CollectedHeap::in_cset_state_t in_cset_state = _g1h->in_cset_state(obj); |
42 if (in_cset_state == G1CollectedHeap::InCSet) { |
42 if (in_cset_state == G1CollectedHeap::InCSet) { |
43 oop forwardee; |
43 oop forwardee; |
44 if (obj->is_forwarded()) { |
44 markOop m = obj->mark(); |
45 forwardee = obj->forwardee(); |
45 if (m->is_marked()) { |
|
46 forwardee = (oop) m->decode_pointer(); |
46 } else { |
47 } else { |
47 forwardee = copy_to_survivor_space(obj); |
48 forwardee = copy_to_survivor_space(obj, m); |
48 } |
49 } |
49 oopDesc::encode_store_heap_oop(p, forwardee); |
50 oopDesc::encode_store_heap_oop(p, forwardee); |
50 } else if (in_cset_state == G1CollectedHeap::IsHumongous) { |
51 } else if (in_cset_state == G1CollectedHeap::IsHumongous) { |
51 _g1h->set_humongous_is_live(obj); |
52 _g1h->set_humongous_is_live(obj); |
52 } else { |
53 } else { |