99 _gc_par_phases[StringDedupTableFixup] = NULL;
100 }
101
102 _gc_par_phases[RedirtyCards] = new WorkerDataArray<double>(max_gc_threads, "Parallel Redirty (ms):");
103 _redirtied_cards = new WorkerDataArray<size_t>(max_gc_threads, "Redirtied Cards:");
104 _gc_par_phases[RedirtyCards]->link_thread_work_items(_redirtied_cards);
105
106 _gc_par_phases[YoungFreeCSet] = new WorkerDataArray<double>(max_gc_threads, "Young Free Collection Set (ms):");
107 _gc_par_phases[NonYoungFreeCSet] = new WorkerDataArray<double>(max_gc_threads, "Non-Young Free Collection Set (ms):");
108
109 _gc_par_phases[PreserveCMReferents] = new WorkerDataArray<double>(max_gc_threads, "Parallel Preserve CM Refs (ms):");
110
111 reset();
112 }
113
114 void G1GCPhaseTimes::reset() {
115 _cur_collection_par_time_ms = 0.0;
116 _cur_collection_code_root_fixup_time_ms = 0.0;
117 _cur_strong_code_root_purge_time_ms = 0.0;
118 _cur_evac_fail_recalc_used = 0.0;
119 _cur_evac_fail_restore_remsets = 0.0;
120 _cur_evac_fail_remove_self_forwards = 0.0;
121 _cur_string_dedup_fixup_time_ms = 0.0;
122 _cur_prepare_tlab_time_ms = 0.0;
123 _cur_resize_tlab_time_ms = 0.0;
124 _cur_derived_pointer_table_update_time_ms = 0.0;
125 _cur_clear_ct_time_ms = 0.0;
126 _cur_expand_heap_time_ms = 0.0;
127 _cur_ref_proc_time_ms = 0.0;
128 _cur_ref_enq_time_ms = 0.0;
129 _cur_collection_start_sec = 0.0;
130 _root_region_scan_wait_time_ms = 0.0;
131 _external_accounted_time_ms = 0.0;
132 _recorded_clear_claimed_marks_time_ms = 0.0;
133 _recorded_young_cset_choice_time_ms = 0.0;
134 _recorded_non_young_cset_choice_time_ms = 0.0;
135 _recorded_redirty_logged_cards_time_ms = 0.0;
136 _recorded_preserve_cm_referents_time_ms = 0.0;
137 _recorded_merge_pss_time_ms = 0.0;
138 _recorded_start_new_cset_time_ms = 0.0;
139 _recorded_total_free_cset_time_ms = 0.0;
329 debug_phase(_gc_par_phases[UpdateRS]);
330 if (G1HotCardCache::default_use_cache()) {
331 trace_phase(_gc_par_phases[ScanHCC]);
332 }
333 debug_phase(_gc_par_phases[ScanRS]);
334 debug_phase(_gc_par_phases[CodeRoots]);
335 #if INCLUDE_AOT
336 debug_phase(_gc_par_phases[AOTCodeRoots]);
337 #endif
338 debug_phase(_gc_par_phases[ObjCopy]);
339 debug_phase(_gc_par_phases[Termination]);
340 debug_phase(_gc_par_phases[Other]);
341 debug_phase(_gc_par_phases[GCWorkerTotal]);
342 trace_phase(_gc_par_phases[GCWorkerEnd], false);
343
344 return sum_ms;
345 }
346
347 double G1GCPhaseTimes::print_post_evacuate_collection_set() const {
348 const double evac_fail_handling = _cur_evac_fail_recalc_used +
349 _cur_evac_fail_remove_self_forwards +
350 _cur_evac_fail_restore_remsets;
351 const double sum_ms = evac_fail_handling +
352 _cur_collection_code_root_fixup_time_ms +
353 _recorded_preserve_cm_referents_time_ms +
354 _cur_ref_proc_time_ms +
355 _cur_ref_enq_time_ms +
356 _cur_clear_ct_time_ms +
357 _recorded_merge_pss_time_ms +
358 _cur_strong_code_root_purge_time_ms +
359 _recorded_redirty_logged_cards_time_ms +
360 _recorded_total_free_cset_time_ms +
361 _cur_fast_reclaim_humongous_time_ms +
362 _cur_expand_heap_time_ms +
363 _cur_string_dedup_fixup_time_ms;
364
365 info_time("Post Evacuate Collection Set", sum_ms);
366
367 debug_time("Code Roots Fixup", _cur_collection_code_root_fixup_time_ms);
368
369 debug_time("Preserve CM Refs", _recorded_preserve_cm_referents_time_ms);
370 trace_phase(_gc_par_phases[PreserveCMReferents]);
371
372 debug_time("Reference Processing", _cur_ref_proc_time_ms);
373
374 if (G1StringDedup::is_enabled()) {
375 debug_time("String Dedup Fixup", _cur_string_dedup_fixup_time_ms);
376 debug_phase(_gc_par_phases[StringDedupQueueFixup]);
377 debug_phase(_gc_par_phases[StringDedupTableFixup]);
378 }
379
380 debug_time("Clear Card Table", _cur_clear_ct_time_ms);
381
382 if (G1CollectedHeap::heap()->evacuation_failed()) {
383 debug_time("Evacuation Failure", evac_fail_handling);
384 trace_time("Recalculate Used", _cur_evac_fail_recalc_used);
385 trace_time("Remove Self Forwards",_cur_evac_fail_remove_self_forwards);
386 trace_time("Restore RemSet", _cur_evac_fail_restore_remsets);
387 }
388
389 debug_time("Reference Enqueuing", _cur_ref_enq_time_ms);
390
391 debug_time("Merge Per-Thread State", _recorded_merge_pss_time_ms);
392 debug_time("Code Roots Purge", _cur_strong_code_root_purge_time_ms);
393
394 debug_time("Redirty Cards", _recorded_redirty_logged_cards_time_ms);
395 trace_phase(_gc_par_phases[RedirtyCards]);
396 #if defined(COMPILER2) || INCLUDE_JVMCI
397 debug_time("DerivedPointerTable Update", _cur_derived_pointer_table_update_time_ms);
398 #endif
399
400 debug_time("Free Collection Set", _recorded_total_free_cset_time_ms);
401 trace_time("Free Collection Set Serial", _recorded_serial_free_cset_time_ms);
402 trace_phase(_gc_par_phases[YoungFreeCSet]);
403 trace_phase(_gc_par_phases[NonYoungFreeCSet]);
404
405 if (G1EagerReclaimHumongousObjects) {
406 debug_time("Humongous Reclaim", _cur_fast_reclaim_humongous_time_ms);
|
99 _gc_par_phases[StringDedupTableFixup] = NULL;
100 }
101
102 _gc_par_phases[RedirtyCards] = new WorkerDataArray<double>(max_gc_threads, "Parallel Redirty (ms):");
103 _redirtied_cards = new WorkerDataArray<size_t>(max_gc_threads, "Redirtied Cards:");
104 _gc_par_phases[RedirtyCards]->link_thread_work_items(_redirtied_cards);
105
106 _gc_par_phases[YoungFreeCSet] = new WorkerDataArray<double>(max_gc_threads, "Young Free Collection Set (ms):");
107 _gc_par_phases[NonYoungFreeCSet] = new WorkerDataArray<double>(max_gc_threads, "Non-Young Free Collection Set (ms):");
108
109 _gc_par_phases[PreserveCMReferents] = new WorkerDataArray<double>(max_gc_threads, "Parallel Preserve CM Refs (ms):");
110
111 reset();
112 }
113
114 void G1GCPhaseTimes::reset() {
115 _cur_collection_par_time_ms = 0.0;
116 _cur_collection_code_root_fixup_time_ms = 0.0;
117 _cur_strong_code_root_purge_time_ms = 0.0;
118 _cur_evac_fail_recalc_used = 0.0;
119 _cur_evac_fail_remove_self_forwards = 0.0;
120 _cur_string_dedup_fixup_time_ms = 0.0;
121 _cur_prepare_tlab_time_ms = 0.0;
122 _cur_resize_tlab_time_ms = 0.0;
123 _cur_derived_pointer_table_update_time_ms = 0.0;
124 _cur_clear_ct_time_ms = 0.0;
125 _cur_expand_heap_time_ms = 0.0;
126 _cur_ref_proc_time_ms = 0.0;
127 _cur_ref_enq_time_ms = 0.0;
128 _cur_collection_start_sec = 0.0;
129 _root_region_scan_wait_time_ms = 0.0;
130 _external_accounted_time_ms = 0.0;
131 _recorded_clear_claimed_marks_time_ms = 0.0;
132 _recorded_young_cset_choice_time_ms = 0.0;
133 _recorded_non_young_cset_choice_time_ms = 0.0;
134 _recorded_redirty_logged_cards_time_ms = 0.0;
135 _recorded_preserve_cm_referents_time_ms = 0.0;
136 _recorded_merge_pss_time_ms = 0.0;
137 _recorded_start_new_cset_time_ms = 0.0;
138 _recorded_total_free_cset_time_ms = 0.0;
328 debug_phase(_gc_par_phases[UpdateRS]);
329 if (G1HotCardCache::default_use_cache()) {
330 trace_phase(_gc_par_phases[ScanHCC]);
331 }
332 debug_phase(_gc_par_phases[ScanRS]);
333 debug_phase(_gc_par_phases[CodeRoots]);
334 #if INCLUDE_AOT
335 debug_phase(_gc_par_phases[AOTCodeRoots]);
336 #endif
337 debug_phase(_gc_par_phases[ObjCopy]);
338 debug_phase(_gc_par_phases[Termination]);
339 debug_phase(_gc_par_phases[Other]);
340 debug_phase(_gc_par_phases[GCWorkerTotal]);
341 trace_phase(_gc_par_phases[GCWorkerEnd], false);
342
343 return sum_ms;
344 }
345
346 double G1GCPhaseTimes::print_post_evacuate_collection_set() const {
347 const double evac_fail_handling = _cur_evac_fail_recalc_used +
348 _cur_evac_fail_remove_self_forwards;
349 const double sum_ms = evac_fail_handling +
350 _cur_collection_code_root_fixup_time_ms +
351 _recorded_preserve_cm_referents_time_ms +
352 _cur_ref_proc_time_ms +
353 _cur_ref_enq_time_ms +
354 _cur_clear_ct_time_ms +
355 _recorded_merge_pss_time_ms +
356 _cur_strong_code_root_purge_time_ms +
357 _recorded_redirty_logged_cards_time_ms +
358 _recorded_total_free_cset_time_ms +
359 _cur_fast_reclaim_humongous_time_ms +
360 _cur_expand_heap_time_ms +
361 _cur_string_dedup_fixup_time_ms;
362
363 info_time("Post Evacuate Collection Set", sum_ms);
364
365 debug_time("Code Roots Fixup", _cur_collection_code_root_fixup_time_ms);
366
367 debug_time("Preserve CM Refs", _recorded_preserve_cm_referents_time_ms);
368 trace_phase(_gc_par_phases[PreserveCMReferents]);
369
370 debug_time("Reference Processing", _cur_ref_proc_time_ms);
371
372 if (G1StringDedup::is_enabled()) {
373 debug_time("String Dedup Fixup", _cur_string_dedup_fixup_time_ms);
374 debug_phase(_gc_par_phases[StringDedupQueueFixup]);
375 debug_phase(_gc_par_phases[StringDedupTableFixup]);
376 }
377
378 debug_time("Clear Card Table", _cur_clear_ct_time_ms);
379
380 if (G1CollectedHeap::heap()->evacuation_failed()) {
381 debug_time("Evacuation Failure", evac_fail_handling);
382 trace_time("Recalculate Used", _cur_evac_fail_recalc_used);
383 trace_time("Remove Self Forwards",_cur_evac_fail_remove_self_forwards);
384 }
385
386 debug_time("Reference Enqueuing", _cur_ref_enq_time_ms);
387
388 debug_time("Merge Per-Thread State", _recorded_merge_pss_time_ms);
389 debug_time("Code Roots Purge", _cur_strong_code_root_purge_time_ms);
390
391 debug_time("Redirty Cards", _recorded_redirty_logged_cards_time_ms);
392 trace_phase(_gc_par_phases[RedirtyCards]);
393 #if defined(COMPILER2) || INCLUDE_JVMCI
394 debug_time("DerivedPointerTable Update", _cur_derived_pointer_table_update_time_ms);
395 #endif
396
397 debug_time("Free Collection Set", _recorded_total_free_cset_time_ms);
398 trace_time("Free Collection Set Serial", _recorded_serial_free_cset_time_ms);
399 trace_phase(_gc_par_phases[YoungFreeCSet]);
400 trace_phase(_gc_par_phases[NonYoungFreeCSet]);
401
402 if (G1EagerReclaimHumongousObjects) {
403 debug_time("Humongous Reclaim", _cur_fast_reclaim_humongous_time_ms);
|