void CollectionSetChooser::verify() { guarantee(_length <= regions_length(), err_msg("_length: %u regions length: %u", _length, regions_length())); guarantee(_curr_index <= _length, err_msg("_curr_index: %u _length: %u", _curr_index, _length)); uint index = 0; size_t sum_of_reclaimable_bytes = 0; while (index < _curr_index) { guarantee(regions_at(index) == NULL, "all entries before _curr_index should be NULL"); index += 1; } HeapRegion *prev = NULL; while (index < _length) { HeapRegion *curr = regions_at(index++); guarantee(curr != NULL, "Regions in _regions array cannot be NULL"); guarantee(!curr->is_young(), "should not be young!"); guarantee(!curr->isHumongous(), "should not be humongous!"); if (prev != NULL) { guarantee(order_regions(prev, curr) != 1, err_msg("GC eff prev: %1.4f GC eff curr: %1.4f", prev->gc_efficiency(), curr->gc_efficiency())); } sum_of_reclaimable_bytes += curr->reclaimable_bytes(); prev = curr; } guarantee(sum_of_reclaimable_bytes == _remaining_reclaimable_bytes, err_msg("reclaimable bytes inconsistent, " "remaining: "SIZE_FORMAT" sum: "SIZE_FORMAT, _remaining_reclaimable_bytes, sum_of_reclaimable_bytes)); }
bool CSetChooserCache::verify() { guarantee(false, "CSetChooserCache::verify(): don't call this any more"); int index = _first; HeapRegion *prev = NULL; for (int i = 0; i < _occupancy; ++i) { guarantee(_cache[index] != NULL, "cache entry should not be empty"); HeapRegion *hr = _cache[index]; guarantee(!hr->is_young(), "should not be young!"); if (prev != NULL) { guarantee(prev->gc_efficiency() >= hr->gc_efficiency(), "cache should be correctly ordered"); } guarantee(hr->sort_index() == get_sort_index(index), "sort index should be correct"); index = trim_index(index + 1); prev = hr; } for (int i = 0; i < (CacheLength - _occupancy); ++i) { guarantee(_cache[index] == NULL, "cache entry should be empty"); index = trim_index(index + 1); } guarantee(index == _first, "we should have reached where we started from"); return true; }
bool CollectionSetChooser::verify() { guarantee(_length >= 0, err_msg("_length: %d", _length)); guarantee(0 <= _curr_index && _curr_index <= _length, err_msg("_curr_index: %d _length: %d", _curr_index, _length)); int index = 0; size_t sum_of_reclaimable_bytes = 0; while (index < _curr_index) { guarantee(_markedRegions.at(index) == NULL, "all entries before _curr_index should be NULL"); index += 1; } HeapRegion *prev = NULL; while (index < _length) { HeapRegion *curr = _markedRegions.at(index++); guarantee(curr != NULL, "Regions in _markedRegions array cannot be NULL"); int si = curr->sort_index(); guarantee(!curr->is_young(), "should not be young!"); guarantee(!curr->isHumongous(), "should not be humongous!"); guarantee(si > -1 && si == (index-1), "sort index invariant"); if (prev != NULL) { guarantee(orderRegions(prev, curr) != 1, err_msg("GC eff prev: %1.4f GC eff curr: %1.4f", prev->gc_efficiency(), curr->gc_efficiency())); } sum_of_reclaimable_bytes += curr->reclaimable_bytes(); prev = curr; } guarantee(sum_of_reclaimable_bytes == _remainingReclaimableBytes, err_msg("reclaimable bytes inconsistent, " "remaining: "SIZE_FORMAT" sum: "SIZE_FORMAT, _remainingReclaimableBytes, sum_of_reclaimable_bytes)); return true; }
void CSetChooserCache::insert(HeapRegion *hr) { guarantee(false, "CSetChooserCache::insert(): don't call this any more"); assert(!is_full(), "cache should not be empty"); hr->calc_gc_efficiency(); int empty_index; if (_occupancy == 0) { empty_index = _first; } else { empty_index = trim_index(_first + _occupancy); assert(_cache[empty_index] == NULL, "last slot should be empty"); int last_index = trim_index(empty_index - 1); HeapRegion *last = _cache[last_index]; assert(last != NULL,"as the cache is not empty, last should not be empty"); while (empty_index != _first && last->gc_efficiency() < hr->gc_efficiency()) { _cache[empty_index] = last; last->set_sort_index(get_sort_index(empty_index)); empty_index = last_index; last_index = trim_index(last_index - 1); last = _cache[last_index]; } } _cache[empty_index] = hr; hr->set_sort_index(get_sort_index(empty_index)); ++_occupancy; assert(verify(), "cache should be consistent"); }