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