--- old/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp 2018-10-22 13:27:58.991431252 +0200 +++ new/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp 2018-10-22 13:27:58.570418141 +0200 @@ -265,7 +265,7 @@ Prefetch::write(obj_ptr, PrefetchCopyIntervalInBytes); const oop obj = oop(obj_ptr); - const oop forward_ptr = old->forward_to_atomic(obj, memory_order_relaxed); + const oop forward_ptr = old->forward_to_atomic(obj, old_mark, memory_order_relaxed); if (forward_ptr == NULL) { Copy::aligned_disjoint_words((HeapWord*) old, obj_ptr, word_sz); @@ -310,7 +310,7 @@ arrayOop(obj)->set_length(0); oop* old_p = set_partial_array_mask(old); do_oop_partial_array(old_p); - } else { + } else if (!obj->is_typeArray()) { HeapRegion* const to_region = _g1h->heap_region_containing(obj_ptr); _scanner.set_region(to_region); obj->oop_iterate_backwards(&_scanner); @@ -355,7 +355,7 @@ oop G1ParScanThreadState::handle_evacuation_failure_par(oop old, markOop m) { assert(_g1h->is_in_cset(old), "Object " PTR_FORMAT " should be in the CSet", p2i(old)); - oop forward_ptr = old->forward_to_atomic(old, memory_order_relaxed); + oop forward_ptr = old->forward_to_atomic(old, m, memory_order_relaxed); if (forward_ptr == NULL) { // Forward-to-self succeeded. We are the "owner" of the object. HeapRegion* r = _g1h->heap_region_containing(old);