660 } |
660 } |
661 } |
661 } |
662 return MemRegion(mr.end(), mr.end()); |
662 return MemRegion(mr.end(), mr.end()); |
663 } |
663 } |
664 |
664 |
665 // Set all the dirty cards in the given region to "precleaned" state. |
|
666 void CardTableModRefBS::preclean_dirty_cards(MemRegion mr) { |
|
667 for (int i = 0; i < _cur_covered_regions; i++) { |
|
668 MemRegion mri = mr.intersection(_covered[i]); |
|
669 if (!mri.is_empty()) { |
|
670 jbyte *cur_entry, *limit; |
|
671 for (cur_entry = byte_for(mri.start()), limit = byte_for(mri.last()); |
|
672 cur_entry <= limit; |
|
673 cur_entry++) { |
|
674 if (*cur_entry == dirty_card) { |
|
675 *cur_entry = precleaned_card; |
|
676 } |
|
677 } |
|
678 } |
|
679 } |
|
680 } |
|
681 |
|
682 uintx CardTableModRefBS::ct_max_alignment_constraint() { |
665 uintx CardTableModRefBS::ct_max_alignment_constraint() { |
683 return card_size * os::vm_page_size(); |
666 return card_size * os::vm_page_size(); |
684 } |
667 } |
685 |
668 |
686 void CardTableModRefBS::verify_guard() { |
669 void CardTableModRefBS::verify_guard() { |