< prev index next >

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

Print this page




 562     verify_remembered_set(p);
 563   }
 564 
 565   template <class T>
 566   void verify_remembered_set(T* p) {
 567     T heap_oop = oopDesc::load_heap_oop(p);
 568     Log(gc, verify) log;
 569     if (!oopDesc::is_null(heap_oop)) {
 570       oop obj = oopDesc::decode_heap_oop_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         jbyte cv_obj = *_bs->byte_for_const(_containing_obj);
 577         jbyte cv_field = *_bs->byte_for_const(p);
 578         const jbyte dirty = CardTableModRefBS::dirty_card_val();
 579 
 580         bool is_bad = !(from->is_young()
 581           || to->rem_set()->contains_reference(p)
 582           || !G1HRRSFlushLogBuffersOnVerify && // buffers were not flushed
 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           _containing_obj->print_on(log.error_stream());
 598           log.error("points to obj " PTR_FORMAT " in region " HR_FORMAT, p2i(obj), HR_FORMAT_PARAMS(to));
 599           if (obj->is_oop()) {
 600             obj->print_on(log.error_stream());
 601           }
 602           log.error("Obj head CTE = %d, field CTE = %d.", cv_obj, cv_field);
 603           log.error("----------");
 604           _failures = true;
 605           _n_failures++;


 877     if (block_is_obj(p)) {
 878       blk->do_object(oop(p));
 879     }
 880     p += block_size(p);
 881   }
 882 }
 883 
 884 G1ContiguousSpace::G1ContiguousSpace(G1BlockOffsetTable* bot) :
 885   _bot_part(bot, this),
 886   _par_alloc_lock(Mutex::leaf, "OffsetTableContigSpace par alloc lock", true),
 887   _gc_time_stamp(0)
 888 {
 889 }
 890 
 891 void G1ContiguousSpace::initialize(MemRegion mr, bool clear_space, bool mangle_space) {
 892   CompactibleSpace::initialize(mr, clear_space, mangle_space);
 893   _top = bottom();
 894   set_saved_mark_word(NULL);
 895   reset_bot();
 896 }
 897 


 562     verify_remembered_set(p);
 563   }
 564 
 565   template <class T>
 566   void verify_remembered_set(T* p) {
 567     T heap_oop = oopDesc::load_heap_oop(p);
 568     Log(gc, verify) log;
 569     if (!oopDesc::is_null(heap_oop)) {
 570       oop obj = oopDesc::decode_heap_oop_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         jbyte cv_obj = *_bs->byte_for_const(_containing_obj);
 577         jbyte cv_field = *_bs->byte_for_const(p);
 578         const jbyte dirty = CardTableModRefBS::dirty_card_val();
 579 
 580         bool is_bad = !(from->is_young()
 581           || to->rem_set()->contains_reference(p)
 582           || (!G1HRRSFlushLogBuffersOnVerify && // buffers were not flushed
 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           _containing_obj->print_on(log.error_stream());
 598           log.error("points to obj " PTR_FORMAT " in region " HR_FORMAT, p2i(obj), HR_FORMAT_PARAMS(to));
 599           if (obj->is_oop()) {
 600             obj->print_on(log.error_stream());
 601           }
 602           log.error("Obj head CTE = %d, field CTE = %d.", cv_obj, cv_field);
 603           log.error("----------");
 604           _failures = true;
 605           _n_failures++;


 877     if (block_is_obj(p)) {
 878       blk->do_object(oop(p));
 879     }
 880     p += block_size(p);
 881   }
 882 }
 883 
 884 G1ContiguousSpace::G1ContiguousSpace(G1BlockOffsetTable* bot) :
 885   _bot_part(bot, this),
 886   _par_alloc_lock(Mutex::leaf, "OffsetTableContigSpace par alloc lock", true),
 887   _gc_time_stamp(0)
 888 {
 889 }
 890 
 891 void G1ContiguousSpace::initialize(MemRegion mr, bool clear_space, bool mangle_space) {
 892   CompactibleSpace::initialize(mr, clear_space, mangle_space);
 893   _top = bottom();
 894   set_saved_mark_word(NULL);
 895   reset_bot();
 896 }

< prev index next >