50 // index 0 contains the rate information for the region retired most recently.
51 class G1SurvRateGroup : public CHeapObj<mtGC> {
52 size_t _stats_arrays_length;
53 double* _accum_surv_rate_pred;
54 double _last_pred;
55 TruncatedSeq** _surv_rate_predictors;
56
57 size_t _num_added_regions; // The number of regions in this survivor rate group.
58
59 void fill_in_last_surv_rates();
60 void finalize_predictions(const G1Predictions& predictor);
61
62 public:
63 static const int InvalidAgeIndex = -1;
64 static bool is_valid_age_index(int age) { return age >= 0; }
65
66 G1SurvRateGroup();
67 void reset();
68 void start_adding_regions();
69 void stop_adding_regions();
70 void record_surviving_words(int age_in_group, size_t surv_words);
71 void all_surviving_words_recorded(const G1Predictions& predictor, bool update_predictors);
72
73 double accum_surv_rate_pred(int age) const {
74 assert(_stats_arrays_length > 0, "invariant" );
75 assert(is_valid_age_index(age), "must be");
76 if ((size_t)age < _stats_arrays_length)
77 return _accum_surv_rate_pred[age];
78 else {
79 double diff = (double)(age - _stats_arrays_length + 1);
80 return _accum_surv_rate_pred[_stats_arrays_length - 1] + diff * _last_pred;
81 }
82 }
83
84 double surv_rate_pred(G1Predictions const& predictor, int age) const {
85 assert(is_valid_age_index(age), "must be");
86
87 age = MIN2(age, (int)_stats_arrays_length - 1);
88
89 return predictor.predict_in_unit_interval(_surv_rate_predictors[age]);
90 }
|
50 // index 0 contains the rate information for the region retired most recently.
51 class G1SurvRateGroup : public CHeapObj<mtGC> {
52 size_t _stats_arrays_length;
53 double* _accum_surv_rate_pred;
54 double _last_pred;
55 TruncatedSeq** _surv_rate_predictors;
56
57 size_t _num_added_regions; // The number of regions in this survivor rate group.
58
59 void fill_in_last_surv_rates();
60 void finalize_predictions(const G1Predictions& predictor);
61
62 public:
63 static const int InvalidAgeIndex = -1;
64 static bool is_valid_age_index(int age) { return age >= 0; }
65
66 G1SurvRateGroup();
67 void reset();
68 void start_adding_regions();
69 void stop_adding_regions();
70 void record_surviving_words(int age_in_group, double surv_rate);
71 void all_surviving_words_recorded(const G1Predictions& predictor, bool update_predictors);
72
73 double accum_surv_rate_pred(int age) const {
74 assert(_stats_arrays_length > 0, "invariant" );
75 assert(is_valid_age_index(age), "must be");
76 if ((size_t)age < _stats_arrays_length)
77 return _accum_surv_rate_pred[age];
78 else {
79 double diff = (double)(age - _stats_arrays_length + 1);
80 return _accum_surv_rate_pred[_stats_arrays_length - 1] + diff * _last_pred;
81 }
82 }
83
84 double surv_rate_pred(G1Predictions const& predictor, int age) const {
85 assert(is_valid_age_index(age), "must be");
86
87 age = MIN2(age, (int)_stats_arrays_length - 1);
88
89 return predictor.predict_in_unit_interval(_surv_rate_predictors[age]);
90 }
|