29 |
29 |
30 class G1Predictions; |
30 class G1Predictions; |
31 |
31 |
32 class SurvRateGroup : public CHeapObj<mtGC> { |
32 class SurvRateGroup : public CHeapObj<mtGC> { |
33 private: |
33 private: |
34 G1Predictions* _predictor; |
|
35 |
|
36 double get_new_prediction(TruncatedSeq const* seq) const; |
|
37 |
|
38 const char* _name; |
|
39 |
|
40 size_t _stats_arrays_length; |
34 size_t _stats_arrays_length; |
41 double* _surv_rate; |
|
42 double* _accum_surv_rate_pred; |
35 double* _accum_surv_rate_pred; |
43 double _last_pred; |
36 double _last_pred; |
44 TruncatedSeq** _surv_rate_pred; |
37 TruncatedSeq** _surv_rate_pred; |
45 NumberSeq** _summary_surv_rates; |
|
46 size_t _summary_surv_rates_len; |
|
47 size_t _summary_surv_rates_max_len; |
|
48 |
38 |
49 int _all_regions_allocated; |
39 int _all_regions_allocated; |
50 size_t _region_num; |
40 size_t _region_num; |
51 size_t _setup_seq_num; |
41 size_t _setup_seq_num; |
52 |
42 |
|
43 void fill_in_last_surv_rates(); |
|
44 void finalize_predictions(const G1Predictions& predictor); |
53 public: |
45 public: |
54 SurvRateGroup(G1Predictions* predictor, |
46 SurvRateGroup(); |
55 const char* name, |
|
56 size_t summary_surv_rates_len); |
|
57 void reset(); |
47 void reset(); |
58 void start_adding_regions(); |
48 void start_adding_regions(); |
59 void stop_adding_regions(); |
49 void stop_adding_regions(); |
60 void record_surviving_words(int age_in_group, size_t surv_words); |
50 void record_surviving_words(int age_in_group, size_t surv_words); |
61 void all_surviving_words_recorded(bool update_predictors); |
51 void all_surviving_words_recorded(const G1Predictions& predictor, bool update_predictors); |
62 const char* name() { return _name; } |
|
63 |
52 |
64 size_t region_num() { return _region_num; } |
53 size_t region_num() const { return _region_num; } |
|
54 |
65 double accum_surv_rate_pred(int age) const { |
55 double accum_surv_rate_pred(int age) const { |
66 assert(age >= 0, "must be"); |
56 assert(age >= 0, "must be"); |
67 if ((size_t)age < _stats_arrays_length) |
57 if ((size_t)age < _stats_arrays_length) |
68 return _accum_surv_rate_pred[age]; |
58 return _accum_surv_rate_pred[age]; |
69 else { |
59 else { |
80 TruncatedSeq* seq = _surv_rate_pred[age]; |
70 TruncatedSeq* seq = _surv_rate_pred[age]; |
81 guarantee( seq != NULL, "invariant" ); |
71 guarantee( seq != NULL, "invariant" ); |
82 return seq; |
72 return seq; |
83 } |
73 } |
84 |
74 |
85 int next_age_index(); |
75 int next_age_index() { |
86 int age_in_group(int age_index) { |
76 ++_region_num; |
|
77 return (int) ++_all_regions_allocated; |
|
78 } |
|
79 |
|
80 int age_in_group(int age_index) const { |
87 int ret = (int) (_all_regions_allocated - age_index); |
81 int ret = (int) (_all_regions_allocated - age_index); |
88 assert( ret >= 0, "invariant" ); |
82 assert( ret >= 0, "invariant" ); |
89 return ret; |
83 return ret; |
90 } |
84 } |
91 void finished_recalculating_age_indexes() { |
85 void finished_recalculating_age_indexes() { |
92 _all_regions_allocated = 0; |
86 _all_regions_allocated = 0; |
93 } |
87 } |
94 |
88 |
95 #ifndef PRODUCT |
|
96 void print(); |
|
97 void print_surv_rate_summary(); |
|
98 #endif // PRODUCT |
|
99 }; |
89 }; |
100 |
90 |
101 #endif // SHARE_VM_GC_G1_SURVRATEGROUP_HPP |
91 #endif // SHARE_VM_GC_G1_SURVRATEGROUP_HPP |