8304712: Only pass total number of regions into G1Policy::calc_min_old_cset_length
Reviewed-by: ayang, iwalulya
This commit is contained in:
parent
51035a75e4
commit
7f9e691630
@ -291,7 +291,7 @@ public:
|
|||||||
void G1CollectionSetChooser::prune(G1CollectionSetCandidates* candidates) {
|
void G1CollectionSetChooser::prune(G1CollectionSetCandidates* candidates) {
|
||||||
G1Policy* p = G1CollectedHeap::heap()->policy();
|
G1Policy* p = G1CollectedHeap::heap()->policy();
|
||||||
|
|
||||||
uint min_old_cset_length = p->calc_min_old_cset_length(candidates);
|
uint min_old_cset_length = p->calc_min_old_cset_length(candidates->num_regions());
|
||||||
uint num_candidates = candidates->num_regions();
|
uint num_candidates = candidates->num_regions();
|
||||||
|
|
||||||
if (min_old_cset_length < num_candidates) {
|
if (min_old_cset_length < num_candidates) {
|
||||||
|
@ -487,7 +487,7 @@ uint G1Policy::calculate_desired_eden_length_before_mixed(double base_time_ms,
|
|||||||
uint max_eden_length) const {
|
uint max_eden_length) const {
|
||||||
G1CollectionSetCandidates* candidates = _collection_set->candidates();
|
G1CollectionSetCandidates* candidates = _collection_set->candidates();
|
||||||
|
|
||||||
uint min_old_regions_end = MIN2(candidates->cur_idx() + calc_min_old_cset_length(candidates),
|
uint min_old_regions_end = MIN2(candidates->cur_idx() + calc_min_old_cset_length(candidates->num_regions()),
|
||||||
candidates->num_regions());
|
candidates->num_regions());
|
||||||
double predicted_region_evac_time_ms = base_time_ms;
|
double predicted_region_evac_time_ms = base_time_ms;
|
||||||
for (uint i = candidates->cur_idx(); i < min_old_regions_end; i++) {
|
for (uint i = candidates->cur_idx(); i < min_old_regions_end; i++) {
|
||||||
@ -1380,7 +1380,7 @@ size_t G1Policy::allowed_waste_in_collection_set() const {
|
|||||||
return G1HeapWastePercent * _g1h->capacity() / 100;
|
return G1HeapWastePercent * _g1h->capacity() / 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint G1Policy::calc_min_old_cset_length(G1CollectionSetCandidates* candidates) const {
|
uint G1Policy::calc_min_old_cset_length(uint num_candidate_regions) const {
|
||||||
// The min old CSet region bound is based on the maximum desired
|
// The min old CSet region bound is based on the maximum desired
|
||||||
// number of mixed GCs after a cycle. I.e., even if some old regions
|
// number of mixed GCs after a cycle. I.e., even if some old regions
|
||||||
// look expensive, we should add them to the CSet anyway to make
|
// look expensive, we should add them to the CSet anyway to make
|
||||||
@ -1390,15 +1390,9 @@ uint G1Policy::calc_min_old_cset_length(G1CollectionSetCandidates* candidates) c
|
|||||||
// The calculation is based on the number of marked regions we added
|
// The calculation is based on the number of marked regions we added
|
||||||
// to the CSet candidates in the first place, not how many remain, so
|
// to the CSet candidates in the first place, not how many remain, so
|
||||||
// that the result is the same during all mixed GCs that follow a cycle.
|
// that the result is the same during all mixed GCs that follow a cycle.
|
||||||
|
const size_t gc_num = MAX2((size_t)G1MixedGCCountTarget, (size_t)1);
|
||||||
const size_t region_num = candidates->num_regions();
|
// Round up to be conservative.
|
||||||
const size_t gc_num = (size_t) MAX2(G1MixedGCCountTarget, (uintx) 1);
|
return (uint)ceil((double)num_candidate_regions / gc_num);
|
||||||
size_t result = region_num / gc_num;
|
|
||||||
// emulate ceiling
|
|
||||||
if (result * gc_num < region_num) {
|
|
||||||
result += 1;
|
|
||||||
}
|
|
||||||
return (uint) result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint G1Policy::calc_max_old_cset_length() const {
|
uint G1Policy::calc_max_old_cset_length() const {
|
||||||
@ -1433,7 +1427,7 @@ void G1Policy::calculate_old_collection_set_regions(G1CollectionSetCandidates* c
|
|||||||
|
|
||||||
double optional_threshold_ms = time_remaining_ms * optional_prediction_fraction();
|
double optional_threshold_ms = time_remaining_ms * optional_prediction_fraction();
|
||||||
|
|
||||||
const uint min_old_cset_length = calc_min_old_cset_length(candidates);
|
const uint min_old_cset_length = calc_min_old_cset_length(candidates->num_regions());
|
||||||
const uint max_old_cset_length = MAX2(min_old_cset_length, calc_max_old_cset_length());
|
const uint max_old_cset_length = MAX2(min_old_cset_length, calc_max_old_cset_length());
|
||||||
const uint max_optional_regions = max_old_cset_length - min_old_cset_length;
|
const uint max_optional_regions = max_old_cset_length - min_old_cset_length;
|
||||||
bool check_time_remaining = use_adaptive_young_list_length();
|
bool check_time_remaining = use_adaptive_young_list_length();
|
||||||
|
@ -257,8 +257,9 @@ public:
|
|||||||
size_t pending_cards_at_gc_start() const { return _pending_cards_at_gc_start; }
|
size_t pending_cards_at_gc_start() const { return _pending_cards_at_gc_start; }
|
||||||
|
|
||||||
// Calculate the minimum number of old regions we'll add to the CSet
|
// Calculate the minimum number of old regions we'll add to the CSet
|
||||||
// during a mixed GC.
|
// during a single mixed GC given the initial number of regions selected during
|
||||||
uint calc_min_old_cset_length(G1CollectionSetCandidates* candidates) const;
|
// marking.
|
||||||
|
uint calc_min_old_cset_length(uint num_candidate_regions) const;
|
||||||
|
|
||||||
// Calculate the maximum number of old regions we'll add to the CSet
|
// Calculate the maximum number of old regions we'll add to the CSet
|
||||||
// during a mixed GC.
|
// during a mixed GC.
|
||||||
|
Loading…
Reference in New Issue
Block a user