diff a/src/hotspot/share/gc/g1/heapRegion.inline.hpp b/src/hotspot/share/gc/g1/heapRegion.inline.hpp --- a/src/hotspot/share/gc/g1/heapRegion.inline.hpp +++ b/src/hotspot/share/gc/g1/heapRegion.inline.hpp @@ -164,11 +164,13 @@ inline bool HeapRegion::is_obj_dead(const oop obj, const G1CMBitMap* const 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->is_marked(obj) && - !is_open_archive(); + !is_closed_archive(); + +// return !(obj_allocated_since_prev_marking(obj) || prev_bitmap->is_marked(obj) || is_closed_archive()); } inline size_t HeapRegion::block_size(const HeapWord *addr) const { if (addr == top()) { return pointer_delta(end(), addr); @@ -348,10 +350,14 @@ size_t size; bool is_dead = is_obj_dead_with_size(obj, bitmap, &size); bool is_precise = false; + if (is_open_archive()) { + log_debug(gc)("seq_iter " PTR_FORMAT " dead %d", p2i(obj), is_dead); + } + cur += size; if (!is_dead) { // Process live object's references. // Non-objArrays are usually marked imprecise at the object