< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahVerifier.cpp
Print this page
rev 55608 : Rename ShenandoahBrooksPointer to ShenandoahForwarding
rev 55609 : Eliminate extra forwarding pointer per object
*** 135,145 ****
switch (_options._verify_liveness) {
case ShenandoahVerifier::_verify_liveness_disable:
// skip
break;
case ShenandoahVerifier::_verify_liveness_complete:
! Atomic::add(obj->size() + ShenandoahForwarding::word_size(), &_ld[obj_reg->region_number()]);
// fallthrough for fast failure for un-live regions:
case ShenandoahVerifier::_verify_liveness_conservative:
check(ShenandoahAsserts::_safe_oop, obj, obj_reg->has_live(),
"Object must belong to region with live data");
break;
--- 135,145 ----
switch (_options._verify_liveness) {
case ShenandoahVerifier::_verify_liveness_disable:
// skip
break;
case ShenandoahVerifier::_verify_liveness_complete:
! Atomic::add((uint) obj->size(), &_ld[obj_reg->region_number()]);
// fallthrough for fast failure for un-live regions:
case ShenandoahVerifier::_verify_liveness_conservative:
check(ShenandoahAsserts::_safe_oop, obj, obj_reg->has_live(),
"Object must belong to region with live data");
break;
*** 275,284 ****
--- 275,285 ----
* Verify oop fields from this object.
* @param obj host object for verified fields
*/
void verify_oops_from(oop obj) {
_loc = obj;
+ obj = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
obj->oop_iterate(this);
_loc = NULL;
}
virtual void do_oop(oop* p) { do_oop_work(p); }
*** 526,536 ****
}
}
virtual void work_humongous(ShenandoahHeapRegion *r, ShenandoahVerifierStack& stack, ShenandoahVerifyOopClosure& cl) {
size_t processed = 0;
! HeapWord* obj = r->bottom() + ShenandoahForwarding::word_size();
if (_heap->complete_marking_context()->is_marked((oop)obj)) {
verify_and_follow(obj, stack, cl, &processed);
}
Atomic::add(processed, &_processed);
}
--- 527,537 ----
}
}
virtual void work_humongous(ShenandoahHeapRegion *r, ShenandoahVerifierStack& stack, ShenandoahVerifyOopClosure& cl) {
size_t processed = 0;
! HeapWord* obj = r->bottom();
if (_heap->complete_marking_context()->is_marked((oop)obj)) {
verify_and_follow(obj, stack, cl, &processed);
}
Atomic::add(processed, &_processed);
}
*** 540,569 ****
MarkBitMap* mark_bit_map = _heap->complete_marking_context()->mark_bit_map();
HeapWord* tams = _heap->complete_marking_context()->top_at_mark_start(r);
// Bitmaps, before TAMS
if (tams > r->bottom()) {
! HeapWord* start = r->bottom() + ShenandoahForwarding::word_size();
HeapWord* addr = mark_bit_map->get_next_marked_addr(start, tams);
while (addr < tams) {
verify_and_follow(addr, stack, cl, &processed);
! addr += ShenandoahForwarding::word_size();
if (addr < tams) {
addr = mark_bit_map->get_next_marked_addr(addr, tams);
}
}
}
// Size-based, after TAMS
{
HeapWord* limit = r->top();
! HeapWord* addr = tams + ShenandoahForwarding::word_size();
while (addr < limit) {
verify_and_follow(addr, stack, cl, &processed);
! addr += oop(addr)->size() + ShenandoahForwarding::word_size();
}
}
Atomic::add(processed, &_processed);
}
--- 541,570 ----
MarkBitMap* mark_bit_map = _heap->complete_marking_context()->mark_bit_map();
HeapWord* tams = _heap->complete_marking_context()->top_at_mark_start(r);
// Bitmaps, before TAMS
if (tams > r->bottom()) {
! HeapWord* start = r->bottom();
HeapWord* addr = mark_bit_map->get_next_marked_addr(start, tams);
while (addr < tams) {
verify_and_follow(addr, stack, cl, &processed);
! addr += 1;
if (addr < tams) {
addr = mark_bit_map->get_next_marked_addr(addr, tams);
}
}
}
// Size-based, after TAMS
{
HeapWord* limit = r->top();
! HeapWord* addr = tams;
while (addr < limit) {
verify_and_follow(addr, stack, cl, &processed);
! addr += oop(addr)->size();
}
}
Atomic::add(processed, &_processed);
}
< prev index next >