--- old/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp 2018-10-23 12:02:41.556005347 +0200 +++ new/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp 2018-10-23 12:02:41.140992424 +0200 @@ -310,7 +310,7 @@ arrayOop(obj)->set_length(0); oop* old_p = set_partial_array_mask(old); do_oop_partial_array(old_p); - } else if (!obj->is_typeArray()) { + } else { HeapRegion* const to_region = _g1h->heap_region_containing(obj_ptr); _scanner.set_region(to_region); obj->oop_iterate_backwards(&_scanner); --- old/src/hotspot/share/oops/oop.inline.hpp 2018-10-23 12:02:43.121054079 +0200 +++ new/src/hotspot/share/oops/oop.inline.hpp 2018-10-23 12:02:42.702041032 +0200 @@ -371,6 +371,8 @@ } oop oopDesc::forward_to_atomic(oop p, markOop compare, atomic_memory_order order) { + // CMS forwards some non-heap value into the mark oop to reserve oops during + // promotion, so the next two asserts do not hold. assert(UseConcMarkSweepGC || check_obj_alignment(p), "forwarding to something not aligned"); assert(UseConcMarkSweepGC || Universe::heap()->is_in_reserved(p),