< prev index next >

src/share/vm/gc/shenandoah/shenandoahPartialGC.cpp

Print this page
rev 13130 : Interleave partial GCs with concurrent GCs.

*** 104,114 **** // 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); r->set_root(false); if (check_and_handle_cancelled_gc()) return; r = _root_regions->claim_next(); } } --- 104,116 ---- // Step 2: Process all root regions. { ShenandoahHeapRegion* r = _root_regions->claim_next(); while (r != NULL) { assert(r->is_root(), "must be root region"); ! if (! r->is_humongous_continuation()) { ! _heap->marked_object_oop_iterate(r, &cl); ! } r->set_root(false); if (check_and_handle_cancelled_gc()) return; r = _root_regions->claim_next(); } }
*** 297,306 **** --- 299,313 ---- 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,351 **** 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"); #endif _matrix->set_connected(p, obj); } } } --- 348,358 ---- 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: "PTR_FORMAT" -> "PTR_FORMAT, p2i(obj), p2i(forw)); #endif _matrix->set_connected(p, obj); } } }
< prev index next >