< prev index next >
src/share/vm/gc/shenandoah/shenandoahPartialGC.cpp
Print this page
rev 13130 : Interleave partial GCs with concurrent GCs.
@@ -104,11 +104,11 @@
// Step 2: Process all root regions.
{
ShenandoahHeapRegion* r = _root_regions->claim_next();
while (r != NULL) {
assert(r->is_root(), "must be root region");
- r->oop_iterate(&cl);
+ _heap->marked_object_oop_iterate(r, &cl);
r->set_root(false);
if (check_and_handle_cancelled_gc()) return;
r = _root_regions->claim_next();
}
}
@@ -297,10 +297,15 @@
ShenandoahHeap::ShenandoahHeapLock heap_lock(_heap);
size_t num_cset = _heap->collection_set()->count();
for (size_t i = 0; i < num_cset; i++) {
ShenandoahHeapRegion* r = _heap->collection_set()->get(i);
_heap->decrease_used(r->used());
+ HeapWord* bottom = r->bottom();
+ HeapWord* top = _heap->complete_top_at_mark_start(r->bottom());
+ if (top > bottom) {
+ _heap->complete_mark_bit_map()->clear_range_large(MemRegion(bottom, top));
+ }
r->recycle();
_heap->free_regions()->add_region(r);
}
reset();
@@ -341,11 +346,11 @@
obj = forw; // For matrix update below.
}
if (UPDATE_MATRIX) {
#ifdef ASSERT
oop forw = ShenandoahBarrierSet::resolve_oop_static_not_null(obj);
- assert(oopDesc::unsafe_equals(obj, forw) || _heap->cancelled_concgc(), "must not be evacuated");
+ assert(oopDesc::unsafe_equals(obj, forw) || _heap->cancelled_concgc(), "must not be evacuated: "PTR_FORMAT" -> "PTR_FORMAT, p2i(obj), p2i(forw));
#endif
_matrix->set_connected(p, obj);
}
}
}
< prev index next >