comparison src/share/vm/gc_implementation/shared/gcAdaptivePolicyCounters.cpp @ 0:a61af66fc99e jdk7-b24

Initial load
author duke
date Sat, 01 Dec 2007 00:00:00 +0000
parents
children c18cbe5936b8
comparison
equal deleted inserted replaced
-1:000000000000 0:a61af66fc99e
1 /*
2 * Copyright 2004-2005 Sun Microsystems, Inc. All Rights Reserved.
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 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 *
23 */
24
25 # include "incls/_precompiled.incl"
26 # include "incls/_gcAdaptivePolicyCounters.cpp.incl"
27
28 // This class keeps statistical information and computes the
29 // size of the heap.
30
31 GCAdaptivePolicyCounters::GCAdaptivePolicyCounters(const char* name,
32 int collectors,
33 int generations,
34 AdaptiveSizePolicy* size_policy_arg)
35 : GCPolicyCounters(name, collectors, generations),
36 _size_policy(size_policy_arg) {
37 if (UsePerfData) {
38 EXCEPTION_MARK;
39 ResourceMark rm;
40
41 const char* cname = PerfDataManager::counter_name(name_space(), "edenSize");
42 _eden_size_counter = PerfDataManager::create_variable(SUN_GC, cname,
43 PerfData::U_Bytes, _size_policy->calculated_eden_size_in_bytes(), CHECK);
44
45 cname = PerfDataManager::counter_name(name_space(), "promoSize");
46 _promo_size_counter = PerfDataManager::create_variable(SUN_GC, cname,
47 PerfData::U_Bytes, size_policy()->calculated_promo_size_in_bytes(),
48 CHECK);
49
50 cname = PerfDataManager::counter_name(name_space(), "youngCapacity");
51 size_t young_capacity_in_bytes =
52 _size_policy->calculated_eden_size_in_bytes() +
53 _size_policy->calculated_survivor_size_in_bytes();
54 _young_capacity_counter = PerfDataManager::create_variable(SUN_GC, cname,
55 PerfData::U_Bytes, young_capacity_in_bytes, CHECK);
56
57 cname = PerfDataManager::counter_name(name_space(), "avgSurvivedAvg");
58 _avg_survived_avg_counter = PerfDataManager::create_variable(SUN_GC, cname,
59 PerfData::U_Bytes, size_policy()->calculated_survivor_size_in_bytes(),
60 CHECK);
61
62 cname = PerfDataManager::counter_name(name_space(), "avgSurvivedDev");
63 _avg_survived_dev_counter = PerfDataManager::create_variable(SUN_GC, cname,
64 PerfData::U_Bytes, (jlong) 0 , CHECK);
65
66 cname = PerfDataManager::counter_name(name_space(), "avgSurvivedPaddedAvg");
67 _avg_survived_padded_avg_counter =
68 PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,
69 size_policy()->calculated_survivor_size_in_bytes(), CHECK);
70
71 cname = PerfDataManager::counter_name(name_space(), "avgMinorPauseTime");
72 _avg_minor_pause_counter = PerfDataManager::create_variable(SUN_GC, cname,
73 PerfData::U_Ticks, (jlong) _size_policy->_avg_minor_pause->average(),
74 CHECK);
75
76 cname = PerfDataManager::counter_name(name_space(), "avgMinorIntervalTime");
77 _avg_minor_interval_counter = PerfDataManager::create_variable(SUN_GC,
78 cname,
79 PerfData::U_Ticks,
80 (jlong) _size_policy->_avg_minor_interval->average(),
81 CHECK);
82
83 #ifdef NOT_PRODUCT
84 // This is a counter for the most recent minor pause time
85 // (the last sample, not the average). It is useful for
86 // verifying the average pause time but not worth putting
87 // into the product.
88 cname = PerfDataManager::counter_name(name_space(), "minorPauseTime");
89 _minor_pause_counter = PerfDataManager::create_variable(SUN_GC, cname,
90 PerfData::U_Ticks, (jlong) _size_policy->_avg_minor_pause->last_sample(),
91 CHECK);
92 #endif
93
94 cname = PerfDataManager::counter_name(name_space(), "minorGcCost");
95 _minor_gc_cost_counter = PerfDataManager::create_variable(SUN_GC,
96 cname,
97 PerfData::U_Ticks,
98 (jlong) _size_policy->minor_gc_cost(),
99 CHECK);
100
101 cname = PerfDataManager::counter_name(name_space(), "mutatorCost");
102 _mutator_cost_counter = PerfDataManager::create_variable(SUN_GC, cname,
103 PerfData::U_Ticks, (jlong) _size_policy->mutator_cost(), CHECK);
104
105 cname = PerfDataManager::counter_name(name_space(), "survived");
106 _survived_counter = PerfDataManager::create_variable(SUN_GC, cname,
107 PerfData::U_Bytes, (jlong) 0, CHECK);
108
109 cname = PerfDataManager::counter_name(name_space(), "promoted");
110 _promoted_counter = PerfDataManager::create_variable(SUN_GC, cname,
111 PerfData::U_Bytes, (jlong) 0, CHECK);
112
113 cname = PerfDataManager::counter_name(name_space(), "avgYoungLive");
114 _avg_young_live_counter = PerfDataManager::create_variable(SUN_GC, cname,
115 PerfData::U_Bytes, (jlong) size_policy()->avg_young_live()->average(),
116 CHECK);
117
118 cname = PerfDataManager::counter_name(name_space(), "avgOldLive");
119 _avg_old_live_counter = PerfDataManager::create_variable(SUN_GC, cname,
120 PerfData::U_Bytes, (jlong) size_policy()->avg_old_live()->average(),
121 CHECK);
122
123 cname = PerfDataManager::counter_name(name_space(), "survivorOverflowed");
124 _survivor_overflowed_counter = PerfDataManager::create_variable(SUN_GC, cname,
125 PerfData::U_Events, (jlong)0, CHECK);
126
127 cname = PerfDataManager::counter_name(name_space(),
128 "decrementTenuringThresholdForGcCost");
129 _decrement_tenuring_threshold_for_gc_cost_counter =
130 PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,
131 (jlong)0, CHECK);
132
133 cname = PerfDataManager::counter_name(name_space(),
134 "incrementTenuringThresholdForGcCost");
135 _increment_tenuring_threshold_for_gc_cost_counter =
136 PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,
137 (jlong)0, CHECK);
138
139 cname = PerfDataManager::counter_name(name_space(),
140 "decrementTenuringThresholdForSurvivorLimit");
141 _decrement_tenuring_threshold_for_survivor_limit_counter =
142 PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,
143 (jlong)0, CHECK);
144 cname = PerfDataManager::counter_name(name_space(),
145 "changeYoungGenForMinPauses");
146 _change_young_gen_for_min_pauses_counter =
147 PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,
148 (jlong)0, CHECK);
149
150 cname = PerfDataManager::counter_name(name_space(),
151 "changeOldGenForMajPauses");
152 _change_old_gen_for_maj_pauses_counter =
153 PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,
154 (jlong)0, CHECK);
155
156 cname = PerfDataManager::counter_name(name_space(),
157 "increaseOldGenForThroughput");
158 _change_old_gen_for_throughput_counter =
159 PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,
160 (jlong)0, CHECK);
161
162 cname = PerfDataManager::counter_name(name_space(),
163 "increaseYoungGenForThroughput");
164 _change_young_gen_for_throughput_counter =
165 PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,
166 (jlong)0, CHECK);
167
168 cname = PerfDataManager::counter_name(name_space(),
169 "decreaseForFootprint");
170 _decrease_for_footprint_counter =
171 PerfDataManager::create_variable(SUN_GC, cname,
172 PerfData::U_Events, (jlong)0, CHECK);
173
174 cname = PerfDataManager::counter_name(name_space(), "decideAtFullGc");
175 _decide_at_full_gc_counter = PerfDataManager::create_variable(SUN_GC, cname,
176 PerfData::U_None, (jlong)0, CHECK);
177
178 cname = PerfDataManager::counter_name(name_space(), "minorPauseYoungSlope");
179 _minor_pause_young_slope_counter =
180 PerfDataManager::create_variable(SUN_GC, cname,
181 PerfData::U_None, (jlong) 0, CHECK);
182
183 cname = PerfDataManager::counter_name(name_space(), "majorCollectionSlope");
184 _major_collection_slope_counter =
185 PerfDataManager::create_variable(SUN_GC, cname,
186 PerfData::U_None, (jlong) 0, CHECK);
187
188 cname = PerfDataManager::counter_name(name_space(), "minorCollectionSlope");
189 _minor_collection_slope_counter =
190 PerfDataManager::create_variable(SUN_GC, cname,
191 PerfData::U_None, (jlong) 0, CHECK);
192 }
193 }
194
195 void GCAdaptivePolicyCounters::update_counters_from_policy() {
196 if (UsePerfData && (size_policy() != NULL)) {
197 update_avg_minor_pause_counter();
198 update_avg_minor_interval_counter();
199 #ifdef NOT_PRODUCT
200 update_minor_pause_counter();
201 #endif
202 update_minor_gc_cost_counter();
203 update_avg_young_live_counter();
204
205 update_survivor_size_counters();
206 update_avg_survived_avg_counters();
207 update_avg_survived_dev_counters();
208 update_avg_survived_padded_avg_counters();
209
210 update_change_old_gen_for_throughput();
211 update_change_young_gen_for_throughput();
212 update_decrease_for_footprint();
213 update_change_young_gen_for_min_pauses();
214 update_change_old_gen_for_maj_pauses();
215
216 update_minor_pause_young_slope_counter();
217 update_minor_collection_slope_counter();
218 update_major_collection_slope_counter();
219 }
220 }
221
222 void GCAdaptivePolicyCounters::update_counters() {
223 if (UsePerfData) {
224 update_counters_from_policy();
225 }
226 }