--- old/src/share/vm/gc/g1/heapRegion.inline.hpp 2017-08-08 17:40:36.463855985 -0400 +++ new/src/share/vm/gc/g1/heapRegion.inline.hpp 2017-08-08 17:40:35.163782102 -0400 @@ -117,12 +117,13 @@ HeapWord* addr = (HeapWord*) obj; assert(addr < top(), "must be"); - assert(!is_closed_archive(), "Archive regions should not have references into interesting regions."); + assert(!is_closed_archive(), + "Closed archive regions should not have references into other regions"); assert(!is_humongous(), "Humongous objects not handled here"); bool obj_is_dead = is_obj_dead(obj, prev_bitmap); if (ClassUnloadingWithConcurrentMark && obj_is_dead) { - assert(!block_is_obj(addr) || is_open_archive(), "must be"); + assert(!block_is_obj(addr), "must be"); *size = block_size_using_bitmap(addr, prev_bitmap); } else { assert(block_is_obj(addr), "must be"); @@ -162,7 +163,9 @@ inline bool HeapRegion::is_obj_dead(const oop obj, const G1CMBitMapRO* prev_bitmap) const { assert(is_in_reserved(obj), "Object " PTR_FORMAT " must be in region", p2i(obj)); - return !obj_allocated_since_prev_marking(obj) && !prev_bitmap->isMarked((HeapWord*)obj); + return !obj_allocated_since_prev_marking(obj) && + !prev_bitmap->isMarked((HeapWord*)obj) && + !is_open_archive(); } inline size_t HeapRegion::block_size(const HeapWord *addr) const {