From 0cc9d332afa7447980e50d0f70469f737334f020 Mon Sep 17 00:00:00 2001 From: Thomas Schatzl Date: Wed, 26 Feb 2025 12:05:26 +0100 Subject: [PATCH] 8350758 Hi all, please review this fix to recent JDK-8349906 to use the current survivor rate in the accumulated survivor rate for initializing newly allocated entries as well. Testing: gha Thanks, Thomas --- src/hotspot/share/gc/g1/g1SurvRateGroup.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/hotspot/share/gc/g1/g1SurvRateGroup.cpp b/src/hotspot/share/gc/g1/g1SurvRateGroup.cpp index c5c0ca992b078..0c7478659f188 100644 --- a/src/hotspot/share/gc/g1/g1SurvRateGroup.cpp +++ b/src/hotspot/share/gc/g1/g1SurvRateGroup.cpp @@ -68,14 +68,6 @@ void G1SurvRateGroup::stop_adding_regions() { _accum_surv_rate_pred = REALLOC_C_HEAP_ARRAY(double, _accum_surv_rate_pred, _num_added_regions, mtGC); _surv_rate_predictors = REALLOC_C_HEAP_ARRAY(TruncatedSeq*, _surv_rate_predictors, _num_added_regions, mtGC); - // Assume that the prediction for the newly added regions is the same as the - // ones at the (current) end of the array. Particularly predictions at the end - // of this array fairly seldom get updated, so having a better initial value - // that is at least somewhat related to the actual application is preferable. - double new_pred = _stats_arrays_length > 1 - ? _accum_surv_rate_pred[_stats_arrays_length - 1] - _accum_surv_rate_pred[_stats_arrays_length - 2] - : InitialSurvivorRate; - for (size_t i = _stats_arrays_length; i < _num_added_regions; ++i) { // Initialize predictors and accumulated survivor rate predictions. _surv_rate_predictors[i] = new TruncatedSeq(10); @@ -83,7 +75,12 @@ void G1SurvRateGroup::stop_adding_regions() { _surv_rate_predictors[i]->add(InitialSurvivorRate); _accum_surv_rate_pred[i] = 0.0; } else { - _surv_rate_predictors[i]->add(_surv_rate_predictors[i-1]->last()); + // Assume that the prediction for the newly added regions is the same as the + // ones at the (current) end of the array. Particularly predictions at the end + // of this array fairly seldom get updated, so having a better initial value + // that is at least somewhat related to the actual application is preferable. + double new_pred = _surv_rate_predictors[i-1]->last(); + _surv_rate_predictors[i]->add(new_pred); _accum_surv_rate_pred[i] = _accum_surv_rate_pred[i-1] + new_pred; } }