--- old/src/share/vm/gc_implementation/g1/g1ParScanThreadState.inline.hpp 2014-07-15 10:22:41.527270542 +0200 +++ new/src/share/vm/gc_implementation/g1/g1ParScanThreadState.inline.hpp 2014-07-15 10:22:41.449268253 +0200 @@ -52,15 +52,16 @@ // set, due to (benign) races in the claim mechanism during RSet scanning more // than one thread might claim the same card. So the same card may be // processed multiple times. So redo this check. - if (_g1h->in_cset_fast_test(obj)) { + if (_g1h->is_in_cset_or_humongous(obj)) { oop forwardee; if (obj->is_forwarded()) { forwardee = obj->forwardee(); } else { forwardee = copy_to_survivor_space(obj); } - assert(forwardee != NULL, "forwardee should not be NULL"); - oopDesc::encode_store_heap_oop(p, forwardee); + if (forwardee != NULL) { + oopDesc::encode_store_heap_oop(p, forwardee); + } } assert(obj != NULL, "Must be");