equal
deleted
inserted
replaced
137 switch (_options._verify_liveness) { |
137 switch (_options._verify_liveness) { |
138 case ShenandoahVerifier::_verify_liveness_disable: |
138 case ShenandoahVerifier::_verify_liveness_disable: |
139 // skip |
139 // skip |
140 break; |
140 break; |
141 case ShenandoahVerifier::_verify_liveness_complete: |
141 case ShenandoahVerifier::_verify_liveness_complete: |
142 Atomic::add((uint) obj->size(), &_ld[obj_reg->region_number()]); |
142 Atomic::add(&_ld[obj_reg->region_number()], (uint) obj->size()); |
143 // fallthrough for fast failure for un-live regions: |
143 // fallthrough for fast failure for un-live regions: |
144 case ShenandoahVerifier::_verify_liveness_conservative: |
144 case ShenandoahVerifier::_verify_liveness_conservative: |
145 check(ShenandoahAsserts::_safe_oop, obj, obj_reg->has_live(), |
145 check(ShenandoahAsserts::_safe_oop, obj, obj_reg->has_live(), |
146 "Object must belong to region with live data"); |
146 "Object must belong to region with live data"); |
147 break; |
147 break; |
477 ShenandoahVerifierTask task = stack.pop(); |
477 ShenandoahVerifierTask task = stack.pop(); |
478 cl.verify_oops_from(task.obj()); |
478 cl.verify_oops_from(task.obj()); |
479 } |
479 } |
480 } |
480 } |
481 |
481 |
482 Atomic::add(processed, &_processed); |
482 Atomic::add(&_processed, processed); |
483 } |
483 } |
484 }; |
484 }; |
485 |
485 |
486 class ShenandoahVerifierMarkedRegionTask : public AbstractGangTask { |
486 class ShenandoahVerifierMarkedRegionTask : public AbstractGangTask { |
487 private: |
487 private: |
516 ShenandoahVerifyOopClosure cl(&stack, _bitmap, _ld, |
516 ShenandoahVerifyOopClosure cl(&stack, _bitmap, _ld, |
517 ShenandoahMessageBuffer("%s, Marked", _label), |
517 ShenandoahMessageBuffer("%s, Marked", _label), |
518 _options); |
518 _options); |
519 |
519 |
520 while (true) { |
520 while (true) { |
521 size_t v = Atomic::add(1u, &_claimed) - 1; |
521 size_t v = Atomic::add(&_claimed, 1u) - 1; |
522 if (v < _heap->num_regions()) { |
522 if (v < _heap->num_regions()) { |
523 ShenandoahHeapRegion* r = _heap->get_region(v); |
523 ShenandoahHeapRegion* r = _heap->get_region(v); |
524 if (!r->is_humongous() && !r->is_trash()) { |
524 if (!r->is_humongous() && !r->is_trash()) { |
525 work_regular(r, stack, cl); |
525 work_regular(r, stack, cl); |
526 } else if (r->is_humongous_start()) { |
526 } else if (r->is_humongous_start()) { |
536 size_t processed = 0; |
536 size_t processed = 0; |
537 HeapWord* obj = r->bottom(); |
537 HeapWord* obj = r->bottom(); |
538 if (_heap->complete_marking_context()->is_marked((oop)obj)) { |
538 if (_heap->complete_marking_context()->is_marked((oop)obj)) { |
539 verify_and_follow(obj, stack, cl, &processed); |
539 verify_and_follow(obj, stack, cl, &processed); |
540 } |
540 } |
541 Atomic::add(processed, &_processed); |
541 Atomic::add(&_processed, processed); |
542 } |
542 } |
543 |
543 |
544 virtual void work_regular(ShenandoahHeapRegion *r, ShenandoahVerifierStack &stack, ShenandoahVerifyOopClosure &cl) { |
544 virtual void work_regular(ShenandoahHeapRegion *r, ShenandoahVerifierStack &stack, ShenandoahVerifyOopClosure &cl) { |
545 size_t processed = 0; |
545 size_t processed = 0; |
546 MarkBitMap* mark_bit_map = _heap->complete_marking_context()->mark_bit_map(); |
546 MarkBitMap* mark_bit_map = _heap->complete_marking_context()->mark_bit_map(); |
569 verify_and_follow(addr, stack, cl, &processed); |
569 verify_and_follow(addr, stack, cl, &processed); |
570 addr += oop(addr)->size(); |
570 addr += oop(addr)->size(); |
571 } |
571 } |
572 } |
572 } |
573 |
573 |
574 Atomic::add(processed, &_processed); |
574 Atomic::add(&_processed, processed); |
575 } |
575 } |
576 |
576 |
577 void verify_and_follow(HeapWord *addr, ShenandoahVerifierStack &stack, ShenandoahVerifyOopClosure &cl, size_t *processed) { |
577 void verify_and_follow(HeapWord *addr, ShenandoahVerifierStack &stack, ShenandoahVerifyOopClosure &cl, size_t *processed) { |
578 if (!_bitmap->par_mark(addr)) return; |
578 if (!_bitmap->par_mark(addr)) return; |
579 |
579 |