< prev index next >

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

Print this page
rev 56952 : [mq]: 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 >