126 _merge_lb_dirty_cards = new WorkerDataArray<size_t>(max_gc_threads, "Dirty Cards:"); |
126 _merge_lb_dirty_cards = new WorkerDataArray<size_t>(max_gc_threads, "Dirty Cards:"); |
127 _gc_par_phases[MergeLB]->link_thread_work_items(_merge_lb_dirty_cards, MergeLBDirtyCards); |
127 _gc_par_phases[MergeLB]->link_thread_work_items(_merge_lb_dirty_cards, MergeLBDirtyCards); |
128 _merge_lb_skipped_cards = new WorkerDataArray<size_t>(max_gc_threads, "Skipped Cards:"); |
128 _merge_lb_skipped_cards = new WorkerDataArray<size_t>(max_gc_threads, "Skipped Cards:"); |
129 _gc_par_phases[MergeLB]->link_thread_work_items(_merge_lb_skipped_cards, MergeLBSkippedCards); |
129 _gc_par_phases[MergeLB]->link_thread_work_items(_merge_lb_skipped_cards, MergeLBSkippedCards); |
130 |
130 |
131 _obj_copy_lab_waste = new WorkerDataArray<size_t>(max_gc_threads, "LAB Waste"); |
131 _gc_par_phases[MergePSS] = new WorkerDataArray<double>(1, "Merge Per-Thread State", true /* is_serial */); |
132 _gc_par_phases[ObjCopy]->link_thread_work_items(_obj_copy_lab_waste, ObjCopyLABWaste); |
132 |
133 _obj_copy_lab_undo_waste = new WorkerDataArray<size_t>(max_gc_threads, "LAB Undo Waste"); |
133 _merge_pss_copied_bytes = new WorkerDataArray<size_t>(max_gc_threads, "Copied Bytes"); |
134 _gc_par_phases[ObjCopy]->link_thread_work_items(_obj_copy_lab_undo_waste, ObjCopyLABUndoWaste); |
134 _gc_par_phases[MergePSS]->link_thread_work_items(_merge_pss_copied_bytes, MergePSSCopiedBytes); |
135 |
135 _merge_pss_lab_waste_bytes = new WorkerDataArray<size_t>(max_gc_threads, "LAB Waste"); |
136 _opt_obj_copy_lab_waste = new WorkerDataArray<size_t>(max_gc_threads, "LAB Waste"); |
136 _gc_par_phases[MergePSS]->link_thread_work_items(_merge_pss_lab_waste_bytes, MergePSSLABWasteBytes); |
137 _gc_par_phases[OptObjCopy]->link_thread_work_items(_obj_copy_lab_waste, ObjCopyLABWaste); |
137 _merge_pss_lab_undo_waste_bytes = new WorkerDataArray<size_t>(max_gc_threads, "LAB Undo Waste"); |
138 _opt_obj_copy_lab_undo_waste = new WorkerDataArray<size_t>(max_gc_threads, "LAB Undo Waste"); |
138 _gc_par_phases[MergePSS]->link_thread_work_items(_merge_pss_lab_undo_waste_bytes, MergePSSLABUndoWasteBytes); |
139 _gc_par_phases[OptObjCopy]->link_thread_work_items(_obj_copy_lab_undo_waste, ObjCopyLABUndoWaste); |
|
140 |
139 |
141 _termination_attempts = new WorkerDataArray<size_t>(max_gc_threads, "Termination Attempts:"); |
140 _termination_attempts = new WorkerDataArray<size_t>(max_gc_threads, "Termination Attempts:"); |
142 _gc_par_phases[Termination]->link_thread_work_items(_termination_attempts); |
141 _gc_par_phases[Termination]->link_thread_work_items(_termination_attempts); |
143 |
142 |
144 _opt_termination_attempts = new WorkerDataArray<size_t>(max_gc_threads, "Optional Termination Attempts:"); |
143 _opt_termination_attempts = new WorkerDataArray<size_t>(max_gc_threads, "Optional Termination Attempts:"); |
187 _recorded_clear_claimed_marks_time_ms = 0.0; |
186 _recorded_clear_claimed_marks_time_ms = 0.0; |
188 _recorded_young_cset_choice_time_ms = 0.0; |
187 _recorded_young_cset_choice_time_ms = 0.0; |
189 _recorded_non_young_cset_choice_time_ms = 0.0; |
188 _recorded_non_young_cset_choice_time_ms = 0.0; |
190 _recorded_redirty_logged_cards_time_ms = 0.0; |
189 _recorded_redirty_logged_cards_time_ms = 0.0; |
191 _recorded_preserve_cm_referents_time_ms = 0.0; |
190 _recorded_preserve_cm_referents_time_ms = 0.0; |
192 _recorded_merge_pss_time_ms = 0.0; |
|
193 _recorded_start_new_cset_time_ms = 0.0; |
191 _recorded_start_new_cset_time_ms = 0.0; |
194 _recorded_total_free_cset_time_ms = 0.0; |
192 _recorded_total_free_cset_time_ms = 0.0; |
195 _recorded_serial_free_cset_time_ms = 0.0; |
193 _recorded_serial_free_cset_time_ms = 0.0; |
196 _cur_fast_reclaim_humongous_time_ms = 0.0; |
194 _cur_fast_reclaim_humongous_time_ms = 0.0; |
197 _cur_region_register_time = 0.0; |
195 _cur_region_register_time = 0.0; |
462 } |
460 } |
463 |
461 |
464 double G1GCPhaseTimes::print_post_evacuate_collection_set() const { |
462 double G1GCPhaseTimes::print_post_evacuate_collection_set() const { |
465 const double evac_fail_handling = _cur_evac_fail_recalc_used + |
463 const double evac_fail_handling = _cur_evac_fail_recalc_used + |
466 _cur_evac_fail_remove_self_forwards; |
464 _cur_evac_fail_remove_self_forwards; |
|
465 assert(_gc_par_phases[MergePSS]->get(0) != WorkerDataArray<double>::uninitialized(), "must be set"); |
|
466 const double merge_pss = _gc_par_phases[MergePSS]->get(0) * MILLIUNITS; |
467 const double sum_ms = evac_fail_handling + |
467 const double sum_ms = evac_fail_handling + |
468 _cur_collection_code_root_fixup_time_ms + |
468 _cur_collection_code_root_fixup_time_ms + |
469 _recorded_preserve_cm_referents_time_ms + |
469 _recorded_preserve_cm_referents_time_ms + |
470 _cur_ref_proc_time_ms + |
470 _cur_ref_proc_time_ms + |
471 (_weak_phase_times.total_time_sec() * MILLIUNITS) + |
471 (_weak_phase_times.total_time_sec() * MILLIUNITS) + |
472 _cur_clear_ct_time_ms + |
472 _cur_clear_ct_time_ms + |
473 _recorded_merge_pss_time_ms + |
473 merge_pss + |
474 _cur_strong_code_root_purge_time_ms + |
474 _cur_strong_code_root_purge_time_ms + |
475 _recorded_redirty_logged_cards_time_ms + |
475 _recorded_redirty_logged_cards_time_ms + |
476 _recorded_total_free_cset_time_ms + |
476 _recorded_total_free_cset_time_ms + |
477 _cur_fast_reclaim_humongous_time_ms + |
477 _cur_fast_reclaim_humongous_time_ms + |
478 _cur_expand_heap_time_ms + |
478 _cur_expand_heap_time_ms + |
498 debug_time("Evacuation Failure", evac_fail_handling); |
498 debug_time("Evacuation Failure", evac_fail_handling); |
499 trace_time("Recalculate Used", _cur_evac_fail_recalc_used); |
499 trace_time("Recalculate Used", _cur_evac_fail_recalc_used); |
500 trace_time("Remove Self Forwards",_cur_evac_fail_remove_self_forwards); |
500 trace_time("Remove Self Forwards",_cur_evac_fail_remove_self_forwards); |
501 } |
501 } |
502 |
502 |
503 debug_time("Merge Per-Thread State", _recorded_merge_pss_time_ms); |
503 debug_phase(_gc_par_phases[MergePSS], 0); |
504 debug_time("Code Roots Purge", _cur_strong_code_root_purge_time_ms); |
504 debug_time("Code Roots Purge", _cur_strong_code_root_purge_time_ms); |
505 |
505 |
506 debug_time("Redirty Cards", _recorded_redirty_logged_cards_time_ms); |
506 debug_time("Redirty Cards", _recorded_redirty_logged_cards_time_ms); |
507 trace_phase(_gc_par_phases[RedirtyCards]); |
507 trace_phase(_gc_par_phases[RedirtyCards]); |
508 #if COMPILER2_OR_JVMCI |
508 #if COMPILER2_OR_JVMCI |
583 "GCWorkerEnd", |
583 "GCWorkerEnd", |
584 "StringDedupQueueFixup", |
584 "StringDedupQueueFixup", |
585 "StringDedupTableFixup", |
585 "StringDedupTableFixup", |
586 "RedirtyCards", |
586 "RedirtyCards", |
587 "YoungFreeCSet", |
587 "YoungFreeCSet", |
588 "NonYoungFreeCSet" |
588 "NonYoungFreeCSet", |
|
589 "MergePSS" |
589 //GCParPhasesSentinel only used to tell end of enum |
590 //GCParPhasesSentinel only used to tell end of enum |
590 }; |
591 }; |
591 |
592 |
592 STATIC_ASSERT(ARRAY_SIZE(names) == G1GCPhaseTimes::GCParPhasesSentinel); // GCParPhases enum and corresponding string array should have the same "length", this tries to assert it |
593 STATIC_ASSERT(ARRAY_SIZE(names) == G1GCPhaseTimes::GCParPhasesSentinel); // GCParPhases enum and corresponding string array should have the same "length", this tries to assert it |
593 |
594 |