< prev index next >

src/hotspot/share/gc/g1/survRateGroup.hpp

Print this page
rev 56952 : [mq]: 8233588-cleanup-survrategroup

*** 23,91 **** */ #ifndef SHARE_GC_G1_SURVRATEGROUP_HPP #define SHARE_GC_G1_SURVRATEGROUP_HPP #include "utilities/numberSeq.hpp" - class G1Predictions; - class SurvRateGroup : public CHeapObj<mtGC> { - private: size_t _stats_arrays_length; double* _accum_surv_rate_pred; double _last_pred; ! TruncatedSeq** _surv_rate_pred; ! int _all_regions_allocated; ! size_t _region_num; ! size_t _setup_seq_num; void fill_in_last_surv_rates(); void finalize_predictions(const G1Predictions& predictor); public: SurvRateGroup(); void reset(); void start_adding_regions(); void stop_adding_regions(); void record_surviving_words(int age_in_group, size_t surv_words); void all_surviving_words_recorded(const G1Predictions& predictor, bool update_predictors); - size_t region_num() const { return _region_num; } - double accum_surv_rate_pred(int age) const { ! assert(age >= 0, "must be"); if ((size_t)age < _stats_arrays_length) return _accum_surv_rate_pred[age]; else { ! double diff = (double) (age - _stats_arrays_length + 1); ! return _accum_surv_rate_pred[_stats_arrays_length-1] + diff * _last_pred; } } ! TruncatedSeq* get_seq(size_t age) const { ! if (age >= _setup_seq_num) { ! guarantee( _setup_seq_num > 0, "invariant" ); ! age = _setup_seq_num-1; ! } ! TruncatedSeq* seq = _surv_rate_pred[age]; ! guarantee( seq != NULL, "invariant" ); ! return seq; } int next_age_index() { ! ++_region_num; ! return (int) ++_all_regions_allocated; } int age_in_group(int age_index) const { ! int ret = (int) (_all_regions_allocated - age_index); ! assert( ret >= 0, "invariant" ); ! return ret; } - void finished_recalculating_age_indexes() { - _all_regions_allocated = 0; - } - }; #endif // SHARE_GC_G1_SURVRATEGROUP_HPP --- 23,83 ---- */ #ifndef SHARE_GC_G1_SURVRATEGROUP_HPP #define SHARE_GC_G1_SURVRATEGROUP_HPP + #include "gc/g1/g1Predictions.hpp" #include "utilities/numberSeq.hpp" class SurvRateGroup : public CHeapObj<mtGC> { size_t _stats_arrays_length; double* _accum_surv_rate_pred; double _last_pred; ! TruncatedSeq** _surv_rate_predictors; ! size_t _num_added_regions; // The number of regions in this SurvRateGroup void fill_in_last_surv_rates(); void finalize_predictions(const G1Predictions& predictor); + public: + static const int InvalidAgeIndex = -1; + static bool is_valid_age_index(int age) { return age >= 0; } + SurvRateGroup(); void reset(); void start_adding_regions(); void stop_adding_regions(); void record_surviving_words(int age_in_group, size_t surv_words); void all_surviving_words_recorded(const G1Predictions& predictor, bool update_predictors); double accum_surv_rate_pred(int age) const { ! assert(_stats_arrays_length > 0, "invariant" ); ! assert(is_valid_age_index(age), "must be"); if ((size_t)age < _stats_arrays_length) return _accum_surv_rate_pred[age]; else { ! double diff = (double)(age - _stats_arrays_length + 1); ! return _accum_surv_rate_pred[_stats_arrays_length - 1] + diff * _last_pred; } } ! double surv_rate_pred(G1Predictions const& predictor, int age) const { ! assert(is_valid_age_index(age), "must be"); ! ! age = MIN2(age, (int)_stats_arrays_length - 1); ! ! return predictor.get_new_unit_prediction(_surv_rate_predictors[age]); } int next_age_index() { ! return (int)++_num_added_regions; } int age_in_group(int age_index) const { ! int result = (int)(_num_added_regions - age_index); ! assert(is_valid_age_index(result), "invariant" ); ! return result; } }; #endif // SHARE_GC_G1_SURVRATEGROUP_HPP
< prev index next >