Mercurial > hg > graal-compiler
annotate src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp @ 6027:8a2e5a6a19a4
7143490: G1: Remove HeapRegion::_top_at_conc_mark_count
Summary: Removed the HeapRegion::_top_at_conc_mark_count field. It is no longer needed as a result of the changes for 6888336 and 7127706. Refactored the closures that finalize and verify the liveness counting data so that common functionality was placed into a base class.
Reviewed-by: brutisso, tonyp
author | johnc |
---|---|
date | Wed, 25 Apr 2012 10:23:12 -0700 |
parents | f95d63e2154a |
children | 14d3f71f831d |
rev | line source |
---|---|
0 | 1 /* |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1387
diff
changeset
|
2 * Copyright (c) 2003, 2010, 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:
1387
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
1387
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:
1387
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
1972 | 25 #ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSGCADAPTIVEPOLICYCOUNTERS_HPP |
26 #define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSGCADAPTIVEPOLICYCOUNTERS_HPP | |
27 | |
28 #include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp" | |
29 #include "gc_implementation/shared/gcAdaptivePolicyCounters.hpp" | |
30 #include "gc_implementation/shared/gcPolicyCounters.hpp" | |
31 | |
0 | 32 // PSGCAdaptivePolicyCounters is a holder class for performance counters |
33 // that track the data and decisions for the ergonomics policy for the | |
34 // parallel scavenge collector. | |
35 | |
36 class PSGCAdaptivePolicyCounters : public GCAdaptivePolicyCounters { | |
37 friend class VMStructs; | |
38 | |
39 private: | |
40 // survivor space vs. tenuring threshold | |
41 PerfVariable* _old_promo_size; | |
42 PerfVariable* _old_eden_size; | |
43 PerfVariable* _avg_promoted_avg_counter; | |
44 PerfVariable* _avg_promoted_dev_counter; | |
45 PerfVariable* _avg_promoted_padded_avg_counter; | |
46 PerfVariable* _avg_pretenured_padded_avg; | |
47 | |
48 // young gen vs. old gen sizing | |
49 PerfVariable* _avg_major_pause; | |
50 PerfVariable* _avg_major_interval; | |
51 PerfVariable* _live_space; | |
52 PerfVariable* _free_space; | |
53 PerfVariable* _avg_base_footprint; | |
1387
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
0
diff
changeset
|
54 PerfVariable* _gc_overhead_limit_exceeded_counter; |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
0
diff
changeset
|
55 PerfVariable* _live_at_last_full_gc_counter; |
0 | 56 PerfVariable* _old_capacity; |
57 PerfVariable* _boundary_moved; | |
58 | |
59 PerfVariable* _change_old_gen_for_min_pauses; | |
60 PerfVariable* _change_young_gen_for_maj_pauses_counter; | |
61 | |
62 PerfVariable* _major_pause_old_slope; | |
63 PerfVariable* _minor_pause_old_slope; | |
64 PerfVariable* _major_pause_young_slope; | |
65 | |
66 PerfVariable* _scavenge_skipped; | |
67 PerfVariable* _full_follows_scavenge; | |
68 | |
69 // Use this time stamp if the gc time stamp is not available. | |
70 TimeStamp _counter_time_stamp; | |
71 | |
72 protected: | |
73 PSAdaptiveSizePolicy* ps_size_policy() { | |
74 return (PSAdaptiveSizePolicy*)_size_policy; | |
75 } | |
76 | |
77 public: | |
78 PSGCAdaptivePolicyCounters(const char* name, int collectors, int generations, | |
79 PSAdaptiveSizePolicy* size_policy); | |
80 inline void update_old_capacity(size_t size_in_bytes) { | |
81 _old_capacity->set_value(size_in_bytes); | |
82 } | |
83 inline void update_old_eden_size(size_t old_size) { | |
84 _old_eden_size->set_value(old_size); | |
85 } | |
86 inline void update_old_promo_size(size_t old_size) { | |
87 _old_promo_size->set_value(old_size); | |
88 } | |
89 inline void update_boundary_moved(int size_in_bytes) { | |
90 _boundary_moved->set_value(size_in_bytes); | |
91 } | |
92 inline void update_avg_promoted_avg() { | |
93 _avg_promoted_avg_counter->set_value( | |
94 (jlong)(ps_size_policy()->avg_promoted()->average()) | |
95 ); | |
96 } | |
97 inline void update_avg_promoted_dev() { | |
98 _avg_promoted_dev_counter->set_value( | |
99 (jlong)(ps_size_policy()->avg_promoted()->deviation()) | |
100 ); | |
101 } | |
102 inline void update_avg_promoted_padded_avg() { | |
103 _avg_promoted_padded_avg_counter->set_value( | |
104 (jlong)(ps_size_policy()->avg_promoted()->padded_average()) | |
105 ); | |
106 } | |
107 | |
108 inline void update_avg_pretenured_padded_avg() { | |
109 _avg_pretenured_padded_avg->set_value( | |
110 (jlong)(ps_size_policy()->_avg_pretenured->padded_average()) | |
111 ); | |
112 } | |
113 inline void update_change_young_gen_for_maj_pauses() { | |
114 _change_young_gen_for_maj_pauses_counter->set_value( | |
115 ps_size_policy()->change_young_gen_for_maj_pauses()); | |
116 } | |
117 inline void update_change_old_gen_for_min_pauses() { | |
118 _change_old_gen_for_min_pauses->set_value( | |
119 ps_size_policy()->change_old_gen_for_min_pauses()); | |
120 } | |
121 | |
122 // compute_generation_free_space() statistics | |
123 | |
124 inline void update_avg_major_pause() { | |
125 _avg_major_pause->set_value( | |
126 (jlong)(ps_size_policy()->_avg_major_pause->average() * 1000.0) | |
127 ); | |
128 } | |
129 inline void update_avg_major_interval() { | |
130 _avg_major_interval->set_value( | |
131 (jlong)(ps_size_policy()->_avg_major_interval->average() * 1000.0) | |
132 ); | |
133 } | |
134 | |
135 inline void update_major_gc_cost_counter() { | |
136 _major_gc_cost_counter->set_value( | |
137 (jlong)(ps_size_policy()->major_gc_cost() * 100.0) | |
138 ); | |
139 } | |
140 inline void update_mutator_cost_counter() { | |
141 _mutator_cost_counter->set_value( | |
142 (jlong)(ps_size_policy()->mutator_cost() * 100.0) | |
143 ); | |
144 } | |
145 | |
146 inline void update_live_space() { | |
147 _live_space->set_value(ps_size_policy()->live_space()); | |
148 } | |
149 inline void update_free_space() { | |
150 _free_space->set_value(ps_size_policy()->free_space()); | |
151 } | |
152 | |
153 inline void update_avg_base_footprint() { | |
154 _avg_base_footprint->set_value( | |
155 (jlong)(ps_size_policy()->avg_base_footprint()->average()) | |
156 ); | |
157 } | |
158 inline void update_avg_old_live() { | |
159 _avg_old_live_counter->set_value( | |
160 (jlong)(ps_size_policy()->avg_old_live()->average()) | |
161 ); | |
162 } | |
163 // Scale up all the slopes | |
164 inline void update_major_pause_old_slope() { | |
165 _major_pause_old_slope->set_value( | |
166 (jlong)(ps_size_policy()->major_pause_old_slope() * 1000) | |
167 ); | |
168 } | |
169 inline void update_minor_pause_old_slope() { | |
170 _minor_pause_old_slope->set_value( | |
171 (jlong)(ps_size_policy()->minor_pause_old_slope() * 1000) | |
172 ); | |
173 } | |
174 inline void update_major_pause_young_slope() { | |
175 _major_pause_young_slope->set_value( | |
176 (jlong)(ps_size_policy()->major_pause_young_slope() * 1000) | |
177 ); | |
178 } | |
1387
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
0
diff
changeset
|
179 inline void update_gc_overhead_limit_exceeded_counter() { |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
0
diff
changeset
|
180 _gc_overhead_limit_exceeded_counter->set_value( |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
0
diff
changeset
|
181 (jlong) ps_size_policy()->gc_overhead_limit_exceeded()); |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
0
diff
changeset
|
182 } |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
0
diff
changeset
|
183 inline void update_live_at_last_full_gc_counter() { |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
0
diff
changeset
|
184 _live_at_last_full_gc_counter->set_value( |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
0
diff
changeset
|
185 (jlong)(ps_size_policy()->live_at_last_full_gc())); |
0bfd3fb24150
6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit.
jmasa
parents:
0
diff
changeset
|
186 } |
0 | 187 |
188 inline void update_scavenge_skipped(int cause) { | |
189 _scavenge_skipped->set_value(cause); | |
190 } | |
191 | |
192 inline void update_full_follows_scavenge(int event) { | |
193 _full_follows_scavenge->set_value(event); | |
194 } | |
195 | |
196 // Update all the counters that can be updated from the size policy. | |
197 // This should be called after all policy changes have been made | |
198 // and reflected internall in the size policy. | |
199 void update_counters_from_policy(); | |
200 | |
201 // Update counters that can be updated from fields internal to the | |
202 // counter or from globals. This is distinguished from counters | |
203 // that are updated via input parameters. | |
204 void update_counters(); | |
205 | |
206 virtual GCPolicyCounters::Name kind() const { | |
207 return GCPolicyCounters::PSGCAdaptivePolicyCountersKind; | |
208 } | |
209 }; | |
1972 | 210 |
211 #endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSGCADAPTIVEPOLICYCOUNTERS_HPP |