< 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 >