< prev index next >

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

Print this page
rev 55208 : imported patch 8220089.webrev.0
rev 55209 : imported patch 8220089.webrev.1
rev 55210 : imported patch 8220089.webrev.2


  22  *
  23  */
  24 
  25 #ifndef SHARE_GC_G1_SURVRATEGROUP_HPP
  26 #define SHARE_GC_G1_SURVRATEGROUP_HPP
  27 
  28 #include "utilities/numberSeq.hpp"
  29 
  30 class G1Predictions;
  31 
  32 class SurvRateGroup : public CHeapObj<mtGC> {
  33 private:
  34   size_t  _stats_arrays_length;
  35   double* _accum_surv_rate_pred;
  36   double  _last_pred;
  37   TruncatedSeq** _surv_rate_pred;
  38 
  39   int _all_regions_allocated;
  40   size_t _region_num;
  41   size_t _setup_seq_num;


  42 
  43   void fill_in_last_surv_rates();
  44   void finalize_predictions(const G1Predictions& predictor);
  45 public:
  46   SurvRateGroup();
  47   void reset();
  48   void start_adding_regions();
  49   void stop_adding_regions();
  50   void record_surviving_words(int age_in_group, size_t surv_words);
  51   void all_surviving_words_recorded(const G1Predictions& predictor, bool update_predictors);
  52 
  53   size_t region_num() const { return _region_num; }
  54 
  55   double accum_surv_rate_pred(int age) const {
  56     assert(age >= 0, "must be");
  57     if ((size_t)age < _stats_arrays_length)
  58       return _accum_surv_rate_pred[age];
  59     else {
  60       double diff = (double) (age - _stats_arrays_length + 1);
  61       return _accum_surv_rate_pred[_stats_arrays_length-1] + diff * _last_pred;
  62     }
  63   }
  64 
  65   TruncatedSeq* get_seq(size_t age) const {
  66     if (age >= _setup_seq_num) {
  67       guarantee( _setup_seq_num > 0, "invariant" );
  68       age = _setup_seq_num-1;
  69     }
  70     TruncatedSeq* seq = _surv_rate_pred[age];
  71     guarantee( seq != NULL, "invariant" );
  72     return seq;
  73   }
  74 
  75   int next_age_index() {
  76     ++_region_num;
  77     return (int) ++_all_regions_allocated;





  78   }
  79 
  80   int age_in_group(int age_index) const {
  81     int ret = (int) (_all_regions_allocated - age_index);
  82     assert( ret >= 0, "invariant" );
  83     return ret;
  84   }
  85   void finished_recalculating_age_indexes() {
  86     _all_regions_allocated = 0;
  87   }
  88 
  89 };
  90 
  91 #endif // SHARE_GC_G1_SURVRATEGROUP_HPP


  22  *
  23  */
  24 
  25 #ifndef SHARE_GC_G1_SURVRATEGROUP_HPP
  26 #define SHARE_GC_G1_SURVRATEGROUP_HPP
  27 
  28 #include "utilities/numberSeq.hpp"
  29 
  30 class G1Predictions;
  31 
  32 class SurvRateGroup : public CHeapObj<mtGC> {
  33 private:
  34   size_t  _stats_arrays_length;
  35   double* _accum_surv_rate_pred;
  36   double  _last_pred;
  37   TruncatedSeq** _surv_rate_pred;
  38 
  39   int _all_regions_allocated;
  40   size_t _region_num;
  41   size_t _setup_seq_num;
  42   // Total number of retained regions.
  43   size_t _retained_region_num;
  44 
  45   void fill_in_last_surv_rates();
  46   void finalize_predictions(const G1Predictions& predictor);
  47 public:
  48   SurvRateGroup();
  49   void reset();
  50   void start_adding_regions();
  51   void stop_adding_regions();
  52   void record_surviving_words(int age_in_group, size_t surv_words);
  53   void all_surviving_words_recorded(const G1Predictions& predictor, bool update_predictors);
  54 
  55   size_t region_num() const { return _region_num; }
  56 
  57   double accum_surv_rate_pred(int age) const {
  58     assert(age >= 0, "must be");
  59     if ((size_t)age < _stats_arrays_length)
  60       return _accum_surv_rate_pred[age];
  61     else {
  62       double diff = (double) (age - _stats_arrays_length + 1);
  63       return _accum_surv_rate_pred[_stats_arrays_length-1] + diff * _last_pred;
  64     }
  65   }
  66 
  67   TruncatedSeq* get_seq(size_t age) const {
  68     if (age >= _setup_seq_num) {
  69       guarantee( _setup_seq_num > 0, "invariant" );
  70       age = _setup_seq_num-1;
  71     }
  72     TruncatedSeq* seq = _surv_rate_pred[age];
  73     guarantee( seq != NULL, "invariant" );
  74     return seq;
  75   }
  76 
  77   int next_age_index() {
  78     ++_region_num;
  79     return (int) ++_all_regions_allocated;
  80   }
  81 
  82   int next_age_index_for_retained() {
  83     ++_retained_region_num;
  84     return next_age_index();
  85   }
  86 
  87   int age_in_group(int age_index) const {
  88     int ret = (int) (_all_regions_allocated - age_index);
  89     assert( ret >= 0, "invariant" );
  90     return ret;
  91   }
  92   void finished_recalculating_age_indexes() {
  93     _all_regions_allocated = 0;
  94   }
  95 
  96 };
  97 
  98 #endif // SHARE_GC_G1_SURVRATEGROUP_HPP
< prev index next >