hotspot/src/share/vm/gc/g1/survRateGroup.cpp
changeset 33216 8ecefd0f0d10
parent 33215 dba714a14246
child 35061 be6025ebffea
equal deleted inserted replaced
33215:dba714a14246 33216:8ecefd0f0d10
    57 }
    57 }
    58 
    58 
    59 void SurvRateGroup::reset() {
    59 void SurvRateGroup::reset() {
    60   _all_regions_allocated = 0;
    60   _all_regions_allocated = 0;
    61   _setup_seq_num         = 0;
    61   _setup_seq_num         = 0;
    62   _accum_surv_rate       = 0.0;
       
    63   _last_pred             = 0.0;
    62   _last_pred             = 0.0;
    64   // the following will set up the arrays with length 1
    63   // the following will set up the arrays with length 1
    65   _region_num            = 1;
    64   _region_num            = 1;
    66 
    65 
    67   // The call to stop_adding_regions() will use "new" to refill
    66   // The call to stop_adding_regions() will use "new" to refill
    81 }
    80 }
    82 
    81 
    83 void SurvRateGroup::start_adding_regions() {
    82 void SurvRateGroup::start_adding_regions() {
    84   _setup_seq_num   = _stats_arrays_length;
    83   _setup_seq_num   = _stats_arrays_length;
    85   _region_num      = 0;
    84   _region_num      = 0;
    86   _accum_surv_rate = 0.0;
       
    87 }
    85 }
    88 
    86 
    89 void SurvRateGroup::stop_adding_regions() {
    87 void SurvRateGroup::stop_adding_regions() {
    90   if (_region_num > _stats_arrays_length) {
    88   if (_region_num > _stats_arrays_length) {
    91     double* old_surv_rate = _surv_rate;
    89     double* old_surv_rate = _surv_rate;
   119   for (size_t i = 0; i < _stats_arrays_length; ++i) {
   117   for (size_t i = 0; i < _stats_arrays_length; ++i) {
   120     _surv_rate[i] = 0.0;
   118     _surv_rate[i] = 0.0;
   121   }
   119   }
   122 }
   120 }
   123 
   121 
   124 double SurvRateGroup::accum_surv_rate(size_t adjustment) {
       
   125   // we might relax this one in the future...
       
   126   guarantee( adjustment == 0 || adjustment == 1, "pre-condition" );
       
   127 
       
   128   double ret = _accum_surv_rate;
       
   129   if (adjustment > 0) {
       
   130     TruncatedSeq* seq = get_seq(_region_num+1);
       
   131     double surv_rate = get_new_prediction(seq);
       
   132     ret += surv_rate;
       
   133   }
       
   134 
       
   135   return ret;
       
   136 }
       
   137 
       
   138 int SurvRateGroup::next_age_index() {
   122 int SurvRateGroup::next_age_index() {
   139   TruncatedSeq* seq = get_seq(_region_num);
       
   140   double surv_rate = get_new_prediction(seq);
       
   141   _accum_surv_rate += surv_rate;
       
   142 
       
   143   ++_region_num;
   123   ++_region_num;
   144   return (int) ++_all_regions_allocated;
   124   return (int) ++_all_regions_allocated;
   145 }
   125 }
   146 
   126 
   147 void SurvRateGroup::record_surviving_words(int age_in_group, size_t surv_words) {
   127 void SurvRateGroup::record_surviving_words(int age_in_group, size_t surv_words) {
   158     if ((size_t)(age_in_group+1) > _summary_surv_rates_max_len)
   138     if ((size_t)(age_in_group+1) > _summary_surv_rates_max_len)
   159       _summary_surv_rates_max_len = age_in_group+1;
   139       _summary_surv_rates_max_len = age_in_group+1;
   160   }
   140   }
   161 }
   141 }
   162 
   142 
   163 void SurvRateGroup::all_surviving_words_recorded(bool propagate) {
   143 void SurvRateGroup::all_surviving_words_recorded(bool update_predictors) {
   164   if (propagate && _region_num > 0) { // conservative
   144   if (update_predictors && _region_num > 0) { // conservative
   165     double surv_rate = _surv_rate_pred[_region_num-1]->last();
   145     double surv_rate = _surv_rate_pred[_region_num-1]->last();
   166     for (size_t i = _region_num; i < _stats_arrays_length; ++i) {
   146     for (size_t i = _region_num; i < _stats_arrays_length; ++i) {
   167       guarantee( _surv_rate[i] <= 0.00001,
   147       guarantee( _surv_rate[i] <= 0.00001,
   168                  "the slot should not have been updated" );
   148                  "the slot should not have been updated" );
   169       _surv_rate_pred[i]->add(surv_rate);
   149       _surv_rate_pred[i]->add(surv_rate);