< prev index next >
src/hotspot/share/gc/g1/survRateGroup.hpp
Print this page
rev 56986 : imported patch 8233588-cleanup-survrategroup
@@ -23,69 +23,61 @@
*/
#ifndef SHARE_GC_G1_SURVRATEGROUP_HPP
#define SHARE_GC_G1_SURVRATEGROUP_HPP
+#include "gc/g1/g1Predictions.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;
+ TruncatedSeq** _surv_rate_predictors;
- int _all_regions_allocated;
- size_t _region_num;
- size_t _setup_seq_num;
+ 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);
- size_t region_num() const { return _region_num; }
-
double accum_surv_rate_pred(int age) const {
- assert(age >= 0, "must be");
+ 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 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;
+ 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() {
- ++_region_num;
- return (int) ++_all_regions_allocated;
+ return (int)++_num_added_regions;
}
int age_in_group(int age_index) const {
- int ret = (int) (_all_regions_allocated - age_index);
- assert( ret >= 0, "invariant" );
- return ret;
+ int result = (int)(_num_added_regions - age_index);
+ assert(is_valid_age_index(result), "invariant" );
+ return result;
}
- void finished_recalculating_age_indexes() {
- _all_regions_allocated = 0;
- }
-
};
#endif // SHARE_GC_G1_SURVRATEGROUP_HPP
< prev index next >