127 assert(start_addr == mr.start(), "MemRegion start must be aligned to a card.");
128 HeapWord* last_addr = _ct_bs->addr_for(last_card_ptr);
129 assert((last_addr + CardTableModRefBS::card_size_in_words) == mr.end(), "MemRegion end must be aligned to a card.");
130 #endif // ASSERT
131
132 // Clear the counts for the (exclusive) card range.
133 size_t from_card_num = ptr_2_card_num(from_card_ptr);
134 size_t to_card_num = ptr_2_card_num(last_card_ptr) + 1;
135 clear_range(from_card_num, to_card_num);
136 }
137 }
138
139 class G1CardCountsClearClosure : public HeapRegionClosure {
140 private:
141 G1CardCounts* _card_counts;
142 public:
143 G1CardCountsClearClosure(G1CardCounts* card_counts) :
144 HeapRegionClosure(), _card_counts(card_counts) { }
145
146
147 virtual bool do_heap_region(HeapRegion* r) {
148 _card_counts->clear_region(r);
149 return false;
150 }
151 };
152
153 void G1CardCounts::clear_all() {
154 assert(SafepointSynchronize::is_at_safepoint(), "don't call this otherwise");
155 G1CardCountsClearClosure cl(this);
156 _g1h->heap_region_iterate(&cl);
157 }
|
127 assert(start_addr == mr.start(), "MemRegion start must be aligned to a card.");
128 HeapWord* last_addr = _ct_bs->addr_for(last_card_ptr);
129 assert((last_addr + CardTableModRefBS::card_size_in_words) == mr.end(), "MemRegion end must be aligned to a card.");
130 #endif // ASSERT
131
132 // Clear the counts for the (exclusive) card range.
133 size_t from_card_num = ptr_2_card_num(from_card_ptr);
134 size_t to_card_num = ptr_2_card_num(last_card_ptr) + 1;
135 clear_range(from_card_num, to_card_num);
136 }
137 }
138
139 class G1CardCountsClearClosure : public HeapRegionClosure {
140 private:
141 G1CardCounts* _card_counts;
142 public:
143 G1CardCountsClearClosure(G1CardCounts* card_counts) :
144 HeapRegionClosure(), _card_counts(card_counts) { }
145
146
147 virtual bool doHeapRegion(HeapRegion* r) {
148 _card_counts->clear_region(r);
149 return false;
150 }
151 };
152
153 void G1CardCounts::clear_all() {
154 assert(SafepointSynchronize::is_at_safepoint(), "don't call this otherwise");
155 G1CardCountsClearClosure cl(this);
156 _g1h->heap_region_iterate(&cl);
157 }
|