< prev index next >
src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp
Print this page
rev 7558 : 8048179: Early reclaim of large objects that are referenced by a few objects
Summary:
Reviewed-by:
rev 7559 : imported patch bengt-review
rev 7560 : [mq]: bengt-review2
@@ -679,21 +679,20 @@
// Since we may have deleted a from_card_cache entry from the RS, clear
// the FCC.
clear_fcc();
}
-bool OtherRegionsTable::occupancy_less_or_equal_than(size_t occ) const {
- guarantee(occ <= (size_t)G1RSetSparseRegionEntries,
- err_msg("Requested maximum occupancy must be smaller or equal than "
- SIZE_FORMAT" but is " SIZE_FORMAT, (size_t)G1RSetSparseRegionEntries, occ));
- // The following statement is a simplification: although the predicate gives a
- // value for the maximum total allowed remembered set entries we always only
- // ever check the sparse remembered set for it.
- // Getting the actual occupancy of even a single fine remembered set (a single
- // coarse entry will almost always exceed the number the sparse remembered set can
- // hold so we just check for zero here) is very expensive, so we do not do it.
- return occ_coarse() == 0 && _first_all_fine_prts == NULL && occ_sparse() <= occ;
+bool OtherRegionsTable::occupancy_less_or_equal_than(size_t limit) const {
+ if (limit <= (size_t)G1RSetSparseRegionEntries) {
+ return occ_coarse() == 0 && _first_all_fine_prts == NULL && occ_sparse() <= limit;
+ } else {
+ // Current uses of this method may only use values less than G1RSetSparseRegionEntries
+ // for the limit. The solution, comparing against occupied() would be too slow
+ // at this time.
+ Unimplemented();
+ return false;
+ }
}
bool OtherRegionsTable::is_empty() const {
return occ_sparse() == 0 && occ_coarse() == 0 && _first_all_fine_prts == NULL;
}
< prev index next >