Mercurial > hg > graal-compiler
annotate src/share/vm/gc_implementation/shared/gcAdaptivePolicyCounters.hpp @ 1941:79d04223b8a5
Added caching for resolved types and resolved fields.
This is crucial, because the local load elimination will lead to wrong results, if field equality (of two RiField objects with the same object and the same RiType) is not given. The caching makes sure that the default equals implementation is sufficient.
author | Thomas Wuerthinger <wuerthinger@ssw.jku.at> |
---|---|
date | Tue, 28 Dec 2010 18:33:26 +0100 |
parents | c18cbe5936b8 |
children | f95d63e2154a |
rev | line source |
---|---|
0 | 1 /* |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
0
diff
changeset
|
2 * Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. |
0 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
0
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
0
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
0
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
25 // This class keeps statistical information and computes the | |
26 // size of the heap. | |
27 | |
28 class GCAdaptivePolicyCounters : public GCPolicyCounters { | |
29 protected: | |
30 PerfVariable* _eden_size_counter; | |
31 PerfVariable* _promo_size_counter; | |
32 | |
33 PerfVariable* _young_capacity_counter; | |
34 | |
35 PerfVariable* _minor_gc_cost_counter; | |
36 PerfVariable* _major_gc_cost_counter; | |
37 PerfVariable* _mutator_cost_counter; | |
38 | |
39 PerfVariable* _avg_young_live_counter; | |
40 PerfVariable* _avg_old_live_counter; | |
41 | |
42 PerfVariable* _avg_minor_pause_counter; | |
43 PerfVariable* _avg_minor_interval_counter; | |
44 | |
45 #ifdef NOT_PRODUCT | |
46 PerfVariable* _minor_pause_counter; | |
47 #endif | |
48 | |
49 PerfVariable* _change_young_gen_for_min_pauses_counter; | |
50 PerfVariable* _change_young_gen_for_throughput_counter; | |
51 PerfVariable* _change_old_gen_for_maj_pauses_counter; | |
52 PerfVariable* _change_old_gen_for_throughput_counter; | |
53 PerfVariable* _decrease_for_footprint_counter; | |
54 | |
55 PerfVariable* _minor_pause_young_slope_counter; | |
56 PerfVariable* _major_pause_old_slope_counter; | |
57 | |
58 PerfVariable* _decide_at_full_gc_counter; | |
59 | |
60 PerfVariable* _survived_counter; | |
61 PerfVariable* _promoted_counter; | |
62 | |
63 PerfVariable* _avg_survived_avg_counter; | |
64 PerfVariable* _avg_survived_dev_counter; | |
65 PerfVariable* _avg_survived_padded_avg_counter; | |
66 | |
67 PerfVariable* _survivor_overflowed_counter; | |
68 PerfVariable* _increment_tenuring_threshold_for_gc_cost_counter; | |
69 PerfVariable* _decrement_tenuring_threshold_for_gc_cost_counter; | |
70 PerfVariable* _decrement_tenuring_threshold_for_survivor_limit_counter; | |
71 | |
72 PerfVariable* _minor_collection_slope_counter; | |
73 PerfVariable* _major_collection_slope_counter; | |
74 | |
75 AdaptiveSizePolicy* _size_policy; | |
76 | |
77 inline void update_eden_size() { | |
78 size_t eden_size_in_bytes = size_policy()->calculated_eden_size_in_bytes(); | |
79 _eden_size_counter->set_value(eden_size_in_bytes); | |
80 } | |
81 | |
82 inline void update_promo_size() { | |
83 _promo_size_counter->set_value( | |
84 size_policy()->calculated_promo_size_in_bytes()); | |
85 } | |
86 | |
87 inline void update_avg_minor_pause_counter() { | |
88 _avg_minor_pause_counter->set_value((jlong) | |
89 (size_policy()->avg_minor_pause()->average() * 1000.0)); | |
90 } | |
91 inline void update_avg_minor_interval_counter() { | |
92 _avg_minor_interval_counter->set_value((jlong) | |
93 (size_policy()->avg_minor_interval()->average() * 1000.0)); | |
94 } | |
95 | |
96 #ifdef NOT_PRODUCT | |
97 inline void update_minor_pause_counter() { | |
98 _minor_pause_counter->set_value((jlong) | |
99 (size_policy()->avg_minor_pause()->last_sample() * 1000.0)); | |
100 } | |
101 #endif | |
102 inline void update_minor_gc_cost_counter() { | |
103 _minor_gc_cost_counter->set_value((jlong) | |
104 (size_policy()->minor_gc_cost() * 100.0)); | |
105 } | |
106 | |
107 inline void update_avg_young_live_counter() { | |
108 _avg_young_live_counter->set_value( | |
109 (jlong)(size_policy()->avg_young_live()->average()) | |
110 ); | |
111 } | |
112 | |
113 inline void update_avg_survived_avg_counters() { | |
114 _avg_survived_avg_counter->set_value( | |
115 (jlong)(size_policy()->_avg_survived->average()) | |
116 ); | |
117 } | |
118 inline void update_avg_survived_dev_counters() { | |
119 _avg_survived_dev_counter->set_value( | |
120 (jlong)(size_policy()->_avg_survived->deviation()) | |
121 ); | |
122 } | |
123 inline void update_avg_survived_padded_avg_counters() { | |
124 _avg_survived_padded_avg_counter->set_value( | |
125 (jlong)(size_policy()->_avg_survived->padded_average()) | |
126 ); | |
127 } | |
128 | |
129 inline void update_change_old_gen_for_throughput() { | |
130 _change_old_gen_for_throughput_counter->set_value( | |
131 size_policy()->change_old_gen_for_throughput()); | |
132 } | |
133 inline void update_change_young_gen_for_throughput() { | |
134 _change_young_gen_for_throughput_counter->set_value( | |
135 size_policy()->change_young_gen_for_throughput()); | |
136 } | |
137 inline void update_decrease_for_footprint() { | |
138 _decrease_for_footprint_counter->set_value( | |
139 size_policy()->decrease_for_footprint()); | |
140 } | |
141 | |
142 inline void update_decide_at_full_gc_counter() { | |
143 _decide_at_full_gc_counter->set_value( | |
144 size_policy()->decide_at_full_gc()); | |
145 } | |
146 | |
147 inline void update_minor_pause_young_slope_counter() { | |
148 _minor_pause_young_slope_counter->set_value( | |
149 (jlong)(size_policy()->minor_pause_young_slope() * 1000) | |
150 ); | |
151 } | |
152 | |
153 virtual void update_counters_from_policy(); | |
154 | |
155 protected: | |
156 virtual AdaptiveSizePolicy* size_policy() { return _size_policy; } | |
157 | |
158 public: | |
159 GCAdaptivePolicyCounters(const char* name, | |
160 int collectors, | |
161 int generations, | |
162 AdaptiveSizePolicy* size_policy); | |
163 | |
164 inline void update_survived(size_t survived) { | |
165 _survived_counter->set_value(survived); | |
166 } | |
167 inline void update_promoted(size_t promoted) { | |
168 _promoted_counter->set_value(promoted); | |
169 } | |
170 inline void update_young_capacity(size_t size_in_bytes) { | |
171 _young_capacity_counter->set_value(size_in_bytes); | |
172 } | |
173 | |
174 virtual void update_counters(); | |
175 | |
176 inline void update_survivor_size_counters() { | |
177 desired_survivor_size()->set_value( | |
178 size_policy()->calculated_survivor_size_in_bytes()); | |
179 } | |
180 inline void update_survivor_overflowed(bool survivor_overflowed) { | |
181 _survivor_overflowed_counter->set_value(survivor_overflowed); | |
182 } | |
183 inline void update_tenuring_threshold(int threshold) { | |
184 tenuring_threshold()->set_value(threshold); | |
185 } | |
186 inline void update_increment_tenuring_threshold_for_gc_cost() { | |
187 _increment_tenuring_threshold_for_gc_cost_counter->set_value( | |
188 size_policy()->increment_tenuring_threshold_for_gc_cost()); | |
189 } | |
190 inline void update_decrement_tenuring_threshold_for_gc_cost() { | |
191 _decrement_tenuring_threshold_for_gc_cost_counter->set_value( | |
192 size_policy()->decrement_tenuring_threshold_for_gc_cost()); | |
193 } | |
194 inline void update_decrement_tenuring_threshold_for_survivor_limit() { | |
195 _decrement_tenuring_threshold_for_survivor_limit_counter->set_value( | |
196 size_policy()->decrement_tenuring_threshold_for_survivor_limit()); | |
197 } | |
198 inline void update_change_young_gen_for_min_pauses() { | |
199 _change_young_gen_for_min_pauses_counter->set_value( | |
200 size_policy()->change_young_gen_for_min_pauses()); | |
201 } | |
202 inline void update_change_old_gen_for_maj_pauses() { | |
203 _change_old_gen_for_maj_pauses_counter->set_value( | |
204 size_policy()->change_old_gen_for_maj_pauses()); | |
205 } | |
206 | |
207 inline void update_minor_collection_slope_counter() { | |
208 _minor_collection_slope_counter->set_value( | |
209 (jlong)(size_policy()->minor_collection_slope() * 1000) | |
210 ); | |
211 } | |
212 | |
213 inline void update_major_collection_slope_counter() { | |
214 _major_collection_slope_counter->set_value( | |
215 (jlong)(size_policy()->major_collection_slope() * 1000) | |
216 ); | |
217 } | |
218 | |
219 void set_size_policy(AdaptiveSizePolicy* v) { _size_policy = v; } | |
220 | |
221 virtual GCPolicyCounters::Name kind() const { | |
222 return GCPolicyCounters::GCAdaptivePolicyCountersKind; | |
223 } | |
224 }; |