src/share/vm/memory/cardTableModRefBS.hpp
Print this page
rev 6804 : imported patch commit-uncommit-within-heap
@@ -94,16 +94,16 @@
}
// The declaration order of these const fields is important; see the
// constructor before changing.
const MemRegion _whole_heap; // the region covered by the card table
- const size_t _guard_index; // index of very last element in the card
+ size_t _guard_index; // index of very last element in the card
// table; it is set to a guard value
// (last_card) and should never be modified
- const size_t _last_valid_index; // index of the last valid element
+ size_t _last_valid_index; // index of the last valid element
const size_t _page_size; // page size used when mapping _byte_map
- const size_t _byte_map_size; // in bytes
+ size_t _byte_map_size; // in bytes
jbyte* _byte_map; // the card marking array
int _cur_covered_regions;
// The covered regions should be in address order.
MemRegion* _covered;
@@ -121,11 +121,16 @@
MemRegion _guard_region;
protected:
// Initialization utilities; covered_words is the size of the covered region
// in, um, words.
- inline size_t cards_required(size_t covered_words);
+ inline size_t cards_required(size_t covered_words) {
+ // Add one for a guard card, used to detect errors.
+ const size_t words = align_size_up(covered_words, card_size_in_words);
+ return words / card_size_in_words + 1;
+ }
+
inline size_t compute_byte_map_size();
// Finds and return the index of the region, if any, to which the given
// region would be contiguous. If none exists, assign a new region and
// returns its index. Requires that no more than the maximum number of
@@ -135,11 +140,11 @@
// Same as above, but finds the region containing the given address
// instead of starting at a given base address.
int find_covering_region_containing(HeapWord* addr);
// Resize one of the regions covered by the remembered set.
- void resize_covered_region(MemRegion new_region);
+ virtual void resize_covered_region(MemRegion new_region);
// Returns the leftmost end of a committed region corresponding to a
// covered region before covered region "ind", or else "NULL" if "ind" is
// the first covered region.
HeapWord* largest_prev_committed_end(int ind) const;
@@ -280,10 +285,12 @@
}
CardTableModRefBS(MemRegion whole_heap, int max_covered_regions);
~CardTableModRefBS();
+ virtual void initialize();
+
// *** Barrier set functions.
bool has_write_ref_pre_barrier() { return false; }
// Record a reference update. Note that these versions are precise!