< prev index next >

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

Print this page




 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 }
< prev index next >