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

changeset 1823
7666957bc44d
parent 1455
ff2402f6a50b
child 1829
1316cec51b4d
equal deleted inserted replaced
1822:0bfd3fb24150 1823:7666957bc44d
73 int n_failures() { return _n_failures; } 73 int n_failures() { return _n_failures; }
74 74
75 virtual void do_oop(narrowOop* p) { do_oop_work(p); } 75 virtual void do_oop(narrowOop* p) { do_oop_work(p); }
76 virtual void do_oop( oop* p) { do_oop_work(p); } 76 virtual void do_oop( oop* p) { do_oop_work(p); }
77 77
78 void print_object(outputStream* out, oop obj) {
79 #ifdef PRODUCT
80 klassOop k = obj->klass();
81 const char* class_name = instanceKlass::cast(k)->external_name();
82 out->print_cr("class name %s", class_name);
83 #else // PRODUCT
84 obj->print_on(out);
85 #endif // PRODUCT
86 }
87
78 template <class T> void do_oop_work(T* p) { 88 template <class T> void do_oop_work(T* p) {
79 assert(_containing_obj != NULL, "Precondition"); 89 assert(_containing_obj != NULL, "Precondition");
80 assert(!_g1h->is_obj_dead_cond(_containing_obj, _use_prev_marking), 90 assert(!_g1h->is_obj_dead_cond(_containing_obj, _use_prev_marking),
81 "Precondition"); 91 "Precondition");
82 T heap_oop = oopDesc::load_heap_oop(p); 92 T heap_oop = oopDesc::load_heap_oop(p);
88 if (!_failures) { 98 if (!_failures) {
89 gclog_or_tty->print_cr(""); 99 gclog_or_tty->print_cr("");
90 gclog_or_tty->print_cr("----------"); 100 gclog_or_tty->print_cr("----------");
91 } 101 }
92 if (!_g1h->is_in_closed_subset(obj)) { 102 if (!_g1h->is_in_closed_subset(obj)) {
103 HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
93 gclog_or_tty->print_cr("Field "PTR_FORMAT 104 gclog_or_tty->print_cr("Field "PTR_FORMAT
94 " of live obj "PTR_FORMAT 105 " of live obj "PTR_FORMAT" in region "
95 " points to obj "PTR_FORMAT 106 "["PTR_FORMAT", "PTR_FORMAT")",
96 " not in the heap.", 107 p, (void*) _containing_obj,
97 p, (void*) _containing_obj, (void*) obj); 108 from->bottom(), from->end());
109 print_object(gclog_or_tty, _containing_obj);
110 gclog_or_tty->print_cr("points to obj "PTR_FORMAT" not in the heap",
111 (void*) obj);
98 } else { 112 } else {
113 HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
114 HeapRegion* to = _g1h->heap_region_containing((HeapWord*)obj);
99 gclog_or_tty->print_cr("Field "PTR_FORMAT 115 gclog_or_tty->print_cr("Field "PTR_FORMAT
100 " of live obj "PTR_FORMAT 116 " of live obj "PTR_FORMAT" in region "
101 " points to dead obj "PTR_FORMAT".", 117 "["PTR_FORMAT", "PTR_FORMAT")",
102 p, (void*) _containing_obj, (void*) obj); 118 p, (void*) _containing_obj,
119 from->bottom(), from->end());
120 print_object(gclog_or_tty, _containing_obj);
121 gclog_or_tty->print_cr("points to dead obj "PTR_FORMAT" in region "
122 "["PTR_FORMAT", "PTR_FORMAT")",
123 (void*) obj, to->bottom(), to->end());
124 print_object(gclog_or_tty, obj);
103 } 125 }
104 gclog_or_tty->print_cr("Live obj:");
105 _containing_obj->print_on(gclog_or_tty);
106 gclog_or_tty->print_cr("Bad referent:");
107 obj->print_on(gclog_or_tty);
108 gclog_or_tty->print_cr("----------"); 126 gclog_or_tty->print_cr("----------");
109 _failures = true; 127 _failures = true;
110 failed = true; 128 failed = true;
111 _n_failures++; 129 _n_failures++;
112 } 130 }
721 if (is_empty()) 739 if (is_empty())
722 st->print(" F"); 740 st->print(" F");
723 else 741 else
724 st->print(" "); 742 st->print(" ");
725 st->print(" %5d", _gc_time_stamp); 743 st->print(" %5d", _gc_time_stamp);
744 st->print(" PTAMS "PTR_FORMAT" NTAMS "PTR_FORMAT,
745 prev_top_at_mark_start(), next_top_at_mark_start());
726 G1OffsetTableContigSpace::print_on(st); 746 G1OffsetTableContigSpace::print_on(st);
727 } 747 }
728 748
729 void HeapRegion::verify(bool allow_dirty) const { 749 void HeapRegion::verify(bool allow_dirty) const {
730 bool dummy = false; 750 bool dummy = false;

mercurial