140 WorkerDataArray<double> _cur_string_dedup_table_fixup_worker_times_ms;
141
142 double _cur_clear_ct_time_ms;
143 double _cur_ref_proc_time_ms;
144 double _cur_ref_enq_time_ms;
145
146 double _cur_collection_start_sec;
147 double _root_region_scan_wait_time_ms;
148
149 double _recorded_young_cset_choice_time_ms;
150 double _recorded_non_young_cset_choice_time_ms;
151
152 WorkerDataArray<double> _last_redirty_logged_cards_time_ms;
153 WorkerDataArray<size_t> _last_redirty_logged_cards_processed_cards;
154 double _recorded_redirty_logged_cards_time_ms;
155
156 double _recorded_young_free_cset_time_ms;
157 double _recorded_non_young_free_cset_time_ms;
158
159 double _cur_fast_reclaim_humongous_time_ms;
160 size_t _cur_fast_reclaim_humongous_total;
161 size_t _cur_fast_reclaim_humongous_candidates;
162 size_t _cur_fast_reclaim_humongous_reclaimed;
163
164 double _cur_verify_before_time_ms;
165 double _cur_verify_after_time_ms;
166
167 // Helper methods for detailed logging
168 void print_stats(int level, const char* str, double value);
169 void print_stats(int level, const char* str, size_t value);
170 void print_stats(int level, const char* str, double value, uint workers);
171
172 public:
173 G1GCPhaseTimes(uint max_gc_threads);
174 void note_gc_start(uint active_gc_threads);
175 void note_gc_end();
176 void print(double pause_time_sec);
177
178 void record_gc_worker_start_time(uint worker_i, double ms) {
179 _last_gc_worker_start_times_ms.set(worker_i, ms);
266 void record_ref_proc_time(double ms) {
267 _cur_ref_proc_time_ms = ms;
268 }
269
270 void record_ref_enq_time(double ms) {
271 _cur_ref_enq_time_ms = ms;
272 }
273
274 void record_root_region_scan_wait_time(double time_ms) {
275 _root_region_scan_wait_time_ms = time_ms;
276 }
277
278 void record_young_free_cset_time_ms(double time_ms) {
279 _recorded_young_free_cset_time_ms = time_ms;
280 }
281
282 void record_non_young_free_cset_time_ms(double time_ms) {
283 _recorded_non_young_free_cset_time_ms = time_ms;
284 }
285
286 void record_fast_reclaim_humongous_stats(size_t total, size_t candidates) {
287 _cur_fast_reclaim_humongous_total = total;
288 _cur_fast_reclaim_humongous_candidates = candidates;
289 }
290
291 void record_fast_reclaim_humongous_time_ms(double value, size_t reclaimed) {
292 _cur_fast_reclaim_humongous_time_ms = value;
293 _cur_fast_reclaim_humongous_reclaimed = reclaimed;
294 }
295
296 void record_young_cset_choice_time_ms(double time_ms) {
297 _recorded_young_cset_choice_time_ms = time_ms;
298 }
299
300 void record_non_young_cset_choice_time_ms(double time_ms) {
301 _recorded_non_young_cset_choice_time_ms = time_ms;
302 }
303
304 void record_redirty_logged_cards_time_ms(uint worker_i, double time_ms) {
305 _last_redirty_logged_cards_time_ms.set(worker_i, time_ms);
306 }
|
140 WorkerDataArray<double> _cur_string_dedup_table_fixup_worker_times_ms;
141
142 double _cur_clear_ct_time_ms;
143 double _cur_ref_proc_time_ms;
144 double _cur_ref_enq_time_ms;
145
146 double _cur_collection_start_sec;
147 double _root_region_scan_wait_time_ms;
148
149 double _recorded_young_cset_choice_time_ms;
150 double _recorded_non_young_cset_choice_time_ms;
151
152 WorkerDataArray<double> _last_redirty_logged_cards_time_ms;
153 WorkerDataArray<size_t> _last_redirty_logged_cards_processed_cards;
154 double _recorded_redirty_logged_cards_time_ms;
155
156 double _recorded_young_free_cset_time_ms;
157 double _recorded_non_young_free_cset_time_ms;
158
159 double _cur_fast_reclaim_humongous_time_ms;
160 double _cur_fast_reclaim_humongous_register_time_ms;
161 size_t _cur_fast_reclaim_humongous_total;
162 size_t _cur_fast_reclaim_humongous_candidates;
163 size_t _cur_fast_reclaim_humongous_reclaimed;
164
165 double _cur_verify_before_time_ms;
166 double _cur_verify_after_time_ms;
167
168 // Helper methods for detailed logging
169 void print_stats(int level, const char* str, double value);
170 void print_stats(int level, const char* str, size_t value);
171 void print_stats(int level, const char* str, double value, uint workers);
172
173 public:
174 G1GCPhaseTimes(uint max_gc_threads);
175 void note_gc_start(uint active_gc_threads);
176 void note_gc_end();
177 void print(double pause_time_sec);
178
179 void record_gc_worker_start_time(uint worker_i, double ms) {
180 _last_gc_worker_start_times_ms.set(worker_i, ms);
267 void record_ref_proc_time(double ms) {
268 _cur_ref_proc_time_ms = ms;
269 }
270
271 void record_ref_enq_time(double ms) {
272 _cur_ref_enq_time_ms = ms;
273 }
274
275 void record_root_region_scan_wait_time(double time_ms) {
276 _root_region_scan_wait_time_ms = time_ms;
277 }
278
279 void record_young_free_cset_time_ms(double time_ms) {
280 _recorded_young_free_cset_time_ms = time_ms;
281 }
282
283 void record_non_young_free_cset_time_ms(double time_ms) {
284 _recorded_non_young_free_cset_time_ms = time_ms;
285 }
286
287 void record_fast_reclaim_humongous_stats(double time_ms, size_t total, size_t candidates) {
288 _cur_fast_reclaim_humongous_register_time_ms = time_ms;
289 _cur_fast_reclaim_humongous_total = total;
290 _cur_fast_reclaim_humongous_candidates = candidates;
291 }
292
293 void record_fast_reclaim_humongous_time_ms(double value, size_t reclaimed) {
294 _cur_fast_reclaim_humongous_time_ms = value;
295 _cur_fast_reclaim_humongous_reclaimed = reclaimed;
296 }
297
298 void record_young_cset_choice_time_ms(double time_ms) {
299 _recorded_young_cset_choice_time_ms = time_ms;
300 }
301
302 void record_non_young_cset_choice_time_ms(double time_ms) {
303 _recorded_non_young_cset_choice_time_ms = time_ms;
304 }
305
306 void record_redirty_logged_cards_time_ms(uint worker_i, double time_ms) {
307 _last_redirty_logged_cards_time_ms.set(worker_i, time_ms);
308 }
|