< prev index next >

src/hotspot/share/gc/g1/heapRegion.cpp

Print this page




 496   VerifyLiveClosure(G1CollectedHeap* g1h, VerifyOption vo) : G1VerificationClosure(g1h, vo) {}
 497   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
 498   virtual void do_oop(oop* p) { do_oop_work(p); }
 499 
 500   template <class T>
 501   void do_oop_work(T* p) {
 502     assert(_containing_obj != NULL, "Precondition");
 503     assert(!_g1h->is_obj_dead_cond(_containing_obj, _vo),
 504       "Precondition");
 505     verify_liveness(p);
 506   }
 507 
 508   template <class T>
 509   void verify_liveness(T* p) {
 510     T heap_oop = RawAccess<>::oop_load(p);
 511     Log(gc, verify) log;
 512     if (!CompressedOops::is_null(heap_oop)) {
 513       oop obj = CompressedOops::decode_not_null(heap_oop);
 514       bool failed = false;
 515       if (!_g1h->is_in_closed_subset(obj) || _g1h->is_obj_dead_cond(obj, _vo)) {
 516         MutexLockerEx x(ParGCRareEvent_lock,
 517           Mutex::_no_safepoint_check_flag);
 518 
 519         if (!_failures) {
 520           log.error("----------");
 521         }
 522         ResourceMark rm;
 523         if (!_g1h->is_in_closed_subset(obj)) {
 524           HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
 525           log.error("Field " PTR_FORMAT " of live obj " PTR_FORMAT " in region [" PTR_FORMAT ", " PTR_FORMAT ")",
 526             p2i(p), p2i(_containing_obj), p2i(from->bottom()), p2i(from->end()));
 527           LogStream ls(log.error());
 528           print_object(&ls, _containing_obj);
 529           HeapRegion* const to = _g1h->heap_region_containing(obj);
 530           log.error("points to obj " PTR_FORMAT " in region " HR_FORMAT " remset %s", p2i(obj), HR_FORMAT_PARAMS(to), to->rem_set()->get_state_str());
 531         } else {
 532           HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
 533           HeapRegion* to = _g1h->heap_region_containing((HeapWord*)obj);
 534           log.error("Field " PTR_FORMAT " of live obj " PTR_FORMAT " in region [" PTR_FORMAT ", " PTR_FORMAT ")",
 535             p2i(p), p2i(_containing_obj), p2i(from->bottom()), p2i(from->end()));
 536           LogStream ls(log.error());
 537           print_object(&ls, _containing_obj);


 567     T heap_oop = RawAccess<>::oop_load(p);
 568     Log(gc, verify) log;
 569     if (!CompressedOops::is_null(heap_oop)) {
 570       oop obj = CompressedOops::decode_not_null(heap_oop);
 571       HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
 572       HeapRegion* to = _g1h->heap_region_containing(obj);
 573       if (from != NULL && to != NULL &&
 574         from != to &&
 575         !to->is_pinned() &&
 576         to->rem_set()->is_complete()) {
 577         jbyte cv_obj = *_ct->byte_for_const(_containing_obj);
 578         jbyte cv_field = *_ct->byte_for_const(p);
 579         const jbyte dirty = G1CardTable::dirty_card_val();
 580 
 581         bool is_bad = !(from->is_young()
 582           || to->rem_set()->contains_reference(p)
 583           || (_containing_obj->is_objArray() ?
 584                 cv_field == dirty :
 585                 cv_obj == dirty || cv_field == dirty));
 586         if (is_bad) {
 587           MutexLockerEx x(ParGCRareEvent_lock,
 588             Mutex::_no_safepoint_check_flag);
 589 
 590           if (!_failures) {
 591             log.error("----------");
 592           }
 593           log.error("Missing rem set entry:");
 594           log.error("Field " PTR_FORMAT " of obj " PTR_FORMAT ", in region " HR_FORMAT,
 595             p2i(p), p2i(_containing_obj), HR_FORMAT_PARAMS(from));
 596           ResourceMark rm;
 597           LogStream ls(log.error());
 598           _containing_obj->print_on(&ls);
 599           log.error("points to obj " PTR_FORMAT " in region " HR_FORMAT " remset %s", p2i(obj), HR_FORMAT_PARAMS(to), to->rem_set()->get_state_str());
 600           if (oopDesc::is_oop(obj)) {
 601             obj->print_on(&ls);
 602           }
 603           log.error("Obj head CTE = %d, field CTE = %d.", cv_obj, cv_field);
 604           log.error("----------");
 605           _failures = true;
 606           _n_failures++;
 607         }
 608       }




 496   VerifyLiveClosure(G1CollectedHeap* g1h, VerifyOption vo) : G1VerificationClosure(g1h, vo) {}
 497   virtual void do_oop(narrowOop* p) { do_oop_work(p); }
 498   virtual void do_oop(oop* p) { do_oop_work(p); }
 499 
 500   template <class T>
 501   void do_oop_work(T* p) {
 502     assert(_containing_obj != NULL, "Precondition");
 503     assert(!_g1h->is_obj_dead_cond(_containing_obj, _vo),
 504       "Precondition");
 505     verify_liveness(p);
 506   }
 507 
 508   template <class T>
 509   void verify_liveness(T* p) {
 510     T heap_oop = RawAccess<>::oop_load(p);
 511     Log(gc, verify) log;
 512     if (!CompressedOops::is_null(heap_oop)) {
 513       oop obj = CompressedOops::decode_not_null(heap_oop);
 514       bool failed = false;
 515       if (!_g1h->is_in_closed_subset(obj) || _g1h->is_obj_dead_cond(obj, _vo)) {
 516         MutexLocker x(ParGCRareEvent_lock);

 517 
 518         if (!_failures) {
 519           log.error("----------");
 520         }
 521         ResourceMark rm;
 522         if (!_g1h->is_in_closed_subset(obj)) {
 523           HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
 524           log.error("Field " PTR_FORMAT " of live obj " PTR_FORMAT " in region [" PTR_FORMAT ", " PTR_FORMAT ")",
 525             p2i(p), p2i(_containing_obj), p2i(from->bottom()), p2i(from->end()));
 526           LogStream ls(log.error());
 527           print_object(&ls, _containing_obj);
 528           HeapRegion* const to = _g1h->heap_region_containing(obj);
 529           log.error("points to obj " PTR_FORMAT " in region " HR_FORMAT " remset %s", p2i(obj), HR_FORMAT_PARAMS(to), to->rem_set()->get_state_str());
 530         } else {
 531           HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
 532           HeapRegion* to = _g1h->heap_region_containing((HeapWord*)obj);
 533           log.error("Field " PTR_FORMAT " of live obj " PTR_FORMAT " in region [" PTR_FORMAT ", " PTR_FORMAT ")",
 534             p2i(p), p2i(_containing_obj), p2i(from->bottom()), p2i(from->end()));
 535           LogStream ls(log.error());
 536           print_object(&ls, _containing_obj);


 566     T heap_oop = RawAccess<>::oop_load(p);
 567     Log(gc, verify) log;
 568     if (!CompressedOops::is_null(heap_oop)) {
 569       oop obj = CompressedOops::decode_not_null(heap_oop);
 570       HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
 571       HeapRegion* to = _g1h->heap_region_containing(obj);
 572       if (from != NULL && to != NULL &&
 573         from != to &&
 574         !to->is_pinned() &&
 575         to->rem_set()->is_complete()) {
 576         jbyte cv_obj = *_ct->byte_for_const(_containing_obj);
 577         jbyte cv_field = *_ct->byte_for_const(p);
 578         const jbyte dirty = G1CardTable::dirty_card_val();
 579 
 580         bool is_bad = !(from->is_young()
 581           || to->rem_set()->contains_reference(p)
 582           || (_containing_obj->is_objArray() ?
 583                 cv_field == dirty :
 584                 cv_obj == dirty || cv_field == dirty));
 585         if (is_bad) {
 586           MutexLocker x(ParGCRareEvent_lock);

 587 
 588           if (!_failures) {
 589             log.error("----------");
 590           }
 591           log.error("Missing rem set entry:");
 592           log.error("Field " PTR_FORMAT " of obj " PTR_FORMAT ", in region " HR_FORMAT,
 593             p2i(p), p2i(_containing_obj), HR_FORMAT_PARAMS(from));
 594           ResourceMark rm;
 595           LogStream ls(log.error());
 596           _containing_obj->print_on(&ls);
 597           log.error("points to obj " PTR_FORMAT " in region " HR_FORMAT " remset %s", p2i(obj), HR_FORMAT_PARAMS(to), to->rem_set()->get_state_str());
 598           if (oopDesc::is_oop(obj)) {
 599             obj->print_on(&ls);
 600           }
 601           log.error("Obj head CTE = %d, field CTE = %d.", cv_obj, cv_field);
 602           log.error("----------");
 603           _failures = true;
 604           _n_failures++;
 605         }
 606       }


< prev index next >