< prev index next >

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

Print this page
rev 14453 : Remove secondary marking bitmap.

*** 57,70 **** ShenandoahHeapRegion *r = _heap->heap_region_containing(obj); stringStream ss; r->print_on(&ss); msg.append(" " PTR_FORMAT " - klass " PTR_FORMAT " %s\n", p2i(obj), p2i(obj->klass()), obj->klass()->external_name()); ! msg.append(" %3s allocated after complete mark start\n", _heap->allocated_after_complete_mark_start((HeapWord *) obj) ? "" : "not"); ! msg.append(" %3s allocated after next mark start\n", _heap->allocated_after_next_mark_start((HeapWord *) obj) ? "" : "not"); ! msg.append(" %3s marked complete\n", _heap->is_marked_complete(obj) ? "" : "not"); ! msg.append(" %3s marked next\n", _heap->is_marked_next(obj) ? "" : "not"); msg.append(" %3s in collection set\n", _heap->in_collection_set(obj) ? "" : "not"); msg.append(" region: %s", ss.as_string()); } void print_non_obj(ShenandoahMessageBuffer& msg, void* loc) { --- 57,68 ---- ShenandoahHeapRegion *r = _heap->heap_region_containing(obj); stringStream ss; r->print_on(&ss); msg.append(" " PTR_FORMAT " - klass " PTR_FORMAT " %s\n", p2i(obj), p2i(obj->klass()), obj->klass()->external_name()); ! msg.append(" %3s allocated after mark start\n", _heap->allocated_after_mark_start((HeapWord *) obj) ? "" : "not"); ! msg.append(" %3s marked\n", _heap->is_marked(obj) ? "" : "not"); msg.append(" %3s in collection set\n", _heap->in_collection_set(obj) ? "" : "not"); msg.append(" region: %s", ss.as_string()); } void print_non_obj(ShenandoahMessageBuffer& msg, void* loc) {
*** 304,320 **** switch (_options._verify_marked) { case ShenandoahVerifier::_verify_marked_disable: // skip break; ! case ShenandoahVerifier::_verify_marked_next: ! verify(_safe_all, obj, _heap->is_marked_next(obj), ! "Must be marked in next bitmap"); ! break; ! case ShenandoahVerifier::_verify_marked_complete: ! verify(_safe_all, obj, _heap->is_marked_complete(obj), ! "Must be marked in complete bitmap"); break; default: assert(false, "Unhandled mark verification"); } --- 302,314 ---- switch (_options._verify_marked) { case ShenandoahVerifier::_verify_marked_disable: // skip break; ! case ShenandoahVerifier::_verify_marked: ! verify(_safe_all, obj, _heap->is_marked(obj), ! "Must be marked"); break; default: assert(false, "Unhandled mark verification"); }
*** 486,500 **** } verify(r, r->capacity() == ShenandoahHeapRegion::region_size_bytes(), "Capacity should match region size"); ! verify(r, r->bottom() <= _heap->complete_top_at_mark_start(r->bottom()), "Region top should not be less than bottom"); ! verify(r, _heap->complete_top_at_mark_start(r->bottom()) <= r->top(), ! "Complete TAMS should not be larger than top"); verify(r, r->get_live_data_bytes() <= r->capacity(), "Live data cannot be larger than capacity"); verify(r, r->garbage() <= r->capacity(), --- 480,494 ---- } verify(r, r->capacity() == ShenandoahHeapRegion::region_size_bytes(), "Capacity should match region size"); ! verify(r, r->bottom() <= _heap->top_at_mark_start(r->bottom()), "Region top should not be less than bottom"); ! verify(r, _heap->top_at_mark_start(r->bottom()) <= r->top(), ! "TAMS should not be larger than top"); verify(r, r->get_live_data_bytes() <= r->capacity(), "Live data cannot be larger than capacity"); verify(r, r->garbage() <= r->capacity(),
*** 637,656 **** } virtual void work_humongous(ShenandoahHeapRegion *r, ShenandoahVerifierStack& stack, ShenandoahVerifyOopClosure& cl) { size_t processed = 0; HeapWord* obj = r->bottom() + BrooksPointer::word_size(); ! if (_heap->is_marked_complete((oop)obj)) { verify_and_follow(obj, stack, cl, &processed); } Atomic::add(processed, &_processed); } virtual void work_regular(ShenandoahHeapRegion *r, ShenandoahVerifierStack &stack, ShenandoahVerifyOopClosure &cl) { size_t processed = 0; ! MarkBitMap* mark_bit_map = _heap->complete_mark_bit_map(); ! HeapWord* tams = _heap->complete_top_at_mark_start(r->bottom()); // Bitmaps, before TAMS if (tams > r->bottom()) { HeapWord* start = r->bottom() + BrooksPointer::word_size(); HeapWord* addr = mark_bit_map->getNextMarkedWordAddress(start, tams); --- 631,650 ---- } virtual void work_humongous(ShenandoahHeapRegion *r, ShenandoahVerifierStack& stack, ShenandoahVerifyOopClosure& cl) { size_t processed = 0; HeapWord* obj = r->bottom() + BrooksPointer::word_size(); ! if (_heap->is_marked((oop)obj)) { verify_and_follow(obj, stack, cl, &processed); } Atomic::add(processed, &_processed); } virtual void work_regular(ShenandoahHeapRegion *r, ShenandoahVerifierStack &stack, ShenandoahVerifyOopClosure &cl) { size_t processed = 0; ! MarkBitMap* mark_bit_map = _heap->mark_bit_map(); ! HeapWord* tams = _heap->top_at_mark_start(r->bottom()); // Bitmaps, before TAMS if (tams > r->bottom()) { HeapWord* start = r->bottom() + BrooksPointer::word_size(); HeapWord* addr = mark_bit_map->getNextMarkedWordAddress(start, tams);
*** 734,744 **** /* skip_cset = */ false, /* skip_humongous_cont = */ false); } OrderAccess::fence(); ! _heap->ensure_parsability(false); // Allocate temporary bitmap for storing marking wavefront: MemRegion mr = MemRegion(_verification_bit_map->startWord(), _verification_bit_map->endWord()); _verification_bit_map->clear_range_large(mr); --- 728,738 ---- /* skip_cset = */ false, /* skip_humongous_cont = */ false); } OrderAccess::fence(); ! _heap->make_tlabs_parsable(false); // Allocate temporary bitmap for storing marking wavefront: MemRegion mr = MemRegion(_verification_bit_map->startWord(), _verification_bit_map->endWord()); _verification_bit_map->clear_range_large(mr);
*** 766,787 **** // before TAMS, we verify the bitmaps, if available; after TAMS, we walk until the top(). It mimics // what marked_object_iterate is doing, without calling into that optimized (and possibly incorrect) // version size_t count_marked = 0; ! if (ShenandoahVerifyLevel >= 4 && marked == _verify_marked_complete) { ShenandoahVerifierMarkedRegionTask task(_heap->regions(), _verification_bit_map, ld, label, options); _heap->workers()->run_task(&task); count_marked = task.processed(); } else { ! guarantee(ShenandoahVerifyLevel < 4 || marked == _verify_marked_next || marked == _verify_marked_disable, "Should be"); } // Step 4. Verify accumulated liveness data, if needed. Only reliable if verification level includes // marked objects. ! if (ShenandoahVerifyLevel >= 4 && marked == _verify_marked_complete && liveness == _verify_liveness_complete) { ShenandoahHeapRegionSet* set = _heap->regions(); for (size_t i = 0; i < _heap->num_regions(); i++) { ShenandoahHeapRegion* r = set->get(i); juint verf_live = 0; --- 760,781 ---- // before TAMS, we verify the bitmaps, if available; after TAMS, we walk until the top(). It mimics // what marked_object_iterate is doing, without calling into that optimized (and possibly incorrect) // version size_t count_marked = 0; ! if (ShenandoahVerifyLevel >= 4 && marked == _verify_marked) { ShenandoahVerifierMarkedRegionTask task(_heap->regions(), _verification_bit_map, ld, label, options); _heap->workers()->run_task(&task); count_marked = task.processed(); } else { ! guarantee(ShenandoahVerifyLevel < 4 || marked == _verify_marked_disable, "Should be"); } // Step 4. Verify accumulated liveness data, if needed. Only reliable if verification level includes // marked objects. ! if (ShenandoahVerifyLevel >= 4 && marked == _verify_marked && liveness == _verify_liveness_complete) { ShenandoahHeapRegionSet* set = _heap->regions(); for (size_t i = 0; i < _heap->num_regions(); i++) { ShenandoahHeapRegion* r = set->get(i); juint verf_live = 0;
*** 851,861 **** void ShenandoahVerifier::verify_after_concmark() { verify_at_safepoint( "After Mark", _verify_forwarded_none, // no forwarded references ! _verify_marked_complete, // bitmaps as precise as we can get _verify_matrix_disable, // matrix might be foobared _verify_cset_none, // no references to cset anymore _verify_liveness_complete, // liveness data must be complete here _verify_regions_disable // trash regions not yet recycled ); --- 845,855 ---- void ShenandoahVerifier::verify_after_concmark() { verify_at_safepoint( "After Mark", _verify_forwarded_none, // no forwarded references ! _verify_marked, // bitmaps as precise as we can get _verify_matrix_disable, // matrix might be foobared _verify_cset_none, // no references to cset anymore _verify_liveness_complete, // liveness data must be complete here _verify_regions_disable // trash regions not yet recycled );
*** 865,875 **** // Evacuation is always preceded by mark, but we want to have a sanity check after // selecting the collection set, and (immediate) regions recycling verify_at_safepoint( "Before Evacuation", _verify_forwarded_none, // no forwarded references ! _verify_marked_complete, // walk over marked objects too _verify_matrix_disable, // skip, verified after mark _verify_cset_disable, // skip, verified after mark _verify_liveness_disable, // skip, verified after mark _verify_regions_disable // trash regions not yet recycled ); --- 859,869 ---- // Evacuation is always preceded by mark, but we want to have a sanity check after // selecting the collection set, and (immediate) regions recycling verify_at_safepoint( "Before Evacuation", _verify_forwarded_none, // no forwarded references ! _verify_marked, // walk over marked objects too _verify_matrix_disable, // skip, verified after mark _verify_cset_disable, // skip, verified after mark _verify_liveness_disable, // skip, verified after mark _verify_regions_disable // trash regions not yet recycled );
*** 877,887 **** void ShenandoahVerifier::verify_after_evacuation() { verify_at_safepoint( "After Evacuation", _verify_forwarded_allow, // objects are still forwarded ! _verify_marked_complete, // bitmaps might be stale, but alloc-after-mark should be well _verify_matrix_disable, // matrix is inconsistent here _verify_cset_forwarded, // all cset refs are fully forwarded _verify_liveness_disable, // no reliable liveness data anymore _verify_regions_notrash // trash regions have been recycled already ); --- 871,881 ---- void ShenandoahVerifier::verify_after_evacuation() { verify_at_safepoint( "After Evacuation", _verify_forwarded_allow, // objects are still forwarded ! _verify_marked, // bitmaps might be stale, but alloc-after-mark should be well _verify_matrix_disable, // matrix is inconsistent here _verify_cset_forwarded, // all cset refs are fully forwarded _verify_liveness_disable, // no reliable liveness data anymore _verify_regions_notrash // trash regions have been recycled already );
*** 889,899 **** void ShenandoahVerifier::verify_before_updaterefs() { verify_at_safepoint( "Before Updating References", _verify_forwarded_allow, // forwarded references allowed ! _verify_marked_complete, // bitmaps might be stale, but alloc-after-mark should be well _verify_matrix_disable, // matrix is inconsistent here _verify_cset_forwarded, // all cset refs are fully forwarded _verify_liveness_disable, // no reliable liveness data anymore _verify_regions_notrash // trash regions have been recycled already ); --- 883,893 ---- void ShenandoahVerifier::verify_before_updaterefs() { verify_at_safepoint( "Before Updating References", _verify_forwarded_allow, // forwarded references allowed ! _verify_marked, // bitmaps might be stale, but alloc-after-mark should be well _verify_matrix_disable, // matrix is inconsistent here _verify_cset_forwarded, // all cset refs are fully forwarded _verify_liveness_disable, // no reliable liveness data anymore _verify_regions_notrash // trash regions have been recycled already );
*** 901,911 **** void ShenandoahVerifier::verify_after_updaterefs() { verify_at_safepoint( "After Updating References", _verify_forwarded_none, // no forwarded references ! _verify_marked_complete, // bitmaps might be stale, but alloc-after-mark should be well _verify_matrix_conservative, // matrix is conservatively consistent _verify_cset_none, // no cset references, all updated _verify_liveness_disable, // no reliable liveness data anymore _verify_regions_nocset // no cset regions, trash regions have appeared ); --- 895,905 ---- void ShenandoahVerifier::verify_after_updaterefs() { verify_at_safepoint( "After Updating References", _verify_forwarded_none, // no forwarded references ! _verify_marked, // bitmaps might be stale, but alloc-after-mark should be well _verify_matrix_conservative, // matrix is conservatively consistent _verify_cset_none, // no cset references, all updated _verify_liveness_disable, // no reliable liveness data anymore _verify_regions_nocset // no cset regions, trash regions have appeared );
*** 913,923 **** void ShenandoahVerifier::verify_before_partial() { verify_at_safepoint( "Before Partial GC", _verify_forwarded_none, // cannot have forwarded objects ! _verify_marked_complete, // bitmaps might be stale, but alloc-after-mark should be well _verify_matrix_conservative, // matrix is conservatively consistent _verify_cset_none, // no cset references before partial _verify_liveness_disable, // no reliable liveness data anymore _verify_regions_notrash_nocset // no trash and no cset regions ); --- 907,917 ---- void ShenandoahVerifier::verify_before_partial() { verify_at_safepoint( "Before Partial GC", _verify_forwarded_none, // cannot have forwarded objects ! _verify_marked, // bitmaps might be stale, but alloc-after-mark should be well _verify_matrix_conservative, // matrix is conservatively consistent _verify_cset_none, // no cset references before partial _verify_liveness_disable, // no reliable liveness data anymore _verify_regions_notrash_nocset // no trash and no cset regions );
*** 925,935 **** void ShenandoahVerifier::verify_after_partial() { verify_at_safepoint( "After Partial GC", _verify_forwarded_none, // cannot have forwarded objects ! _verify_marked_complete, // bitmaps might be stale, but alloc-after-mark should be well _verify_matrix_conservative, // matrix is conservatively consistent _verify_cset_none, // no cset references left after partial _verify_liveness_disable, // no reliable liveness data anymore _verify_regions_nocset // no cset regions, trash regions allowed ); --- 919,929 ---- void ShenandoahVerifier::verify_after_partial() { verify_at_safepoint( "After Partial GC", _verify_forwarded_none, // cannot have forwarded objects ! _verify_marked, // bitmaps might be stale, but alloc-after-mark should be well _verify_matrix_conservative, // matrix is conservatively consistent _verify_cset_none, // no cset references left after partial _verify_liveness_disable, // no reliable liveness data anymore _verify_regions_nocset // no cset regions, trash regions allowed );
*** 949,959 **** void ShenandoahVerifier::verify_after_fullgc() { verify_at_safepoint( "After Full GC", _verify_forwarded_none, // all objects are non-forwarded ! _verify_marked_complete, // all objects are marked in complete bitmap _verify_matrix_conservative, // matrix is conservatively consistent _verify_cset_none, // no cset references _verify_liveness_disable, // no reliable liveness data anymore _verify_regions_notrash_nocset // no trash, no cset ); --- 943,953 ---- void ShenandoahVerifier::verify_after_fullgc() { verify_at_safepoint( "After Full GC", _verify_forwarded_none, // all objects are non-forwarded ! _verify_marked, // all objects are marked _verify_matrix_conservative, // matrix is conservatively consistent _verify_cset_none, // no cset references _verify_liveness_disable, // no reliable liveness data anymore _verify_regions_notrash_nocset // no trash, no cset );
< prev index next >