src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp

Print this page
rev 5920 : 8035406: Improve data structure for Code Cache remembered sets
Summary: Change the code cache remembered sets data structure from a GrowableArray to a chunked list of nmethods. This makes the data structure more amenable to parallelization, and decreases freeing time.
Reviewed-by:
rev 5921 : 8027295: Free CSet takes ~50% of young pause time
Summary: Improve fast card cache iteration and avoid taking locks when freeing the collection set.
Reviewed-by:
rev 5922 : 8035398: Add card redirty time in "Other" time in G1
Summary: Show the time taken by card redirtying during GC in a new "Redirty Cards" line.
Reviewed-by:
rev 5923 : 8035654: Add times for evacuation failure handling in "Other" time
Summary: Detailed breakdown of time spent in the evacuation failure handling phases to make the "Other" time roughly correspond to the sum of its parts.
Reviewed-by:


 292       _last_satb_filtering_times_ms.print(1, "SATB Filtering (ms)");
 293     }
 294     if (_last_strong_code_root_mark_times_ms.sum() > 0.0) {
 295       _last_strong_code_root_mark_times_ms.print(1, "Code Root Marking (ms)");
 296     }
 297     _last_update_rs_times_ms.print(1, "Update RS (ms)");
 298       _last_update_rs_processed_buffers.print(2, "Processed Buffers");
 299     _last_scan_rs_times_ms.print(1, "Scan RS (ms)");
 300     _last_strong_code_root_scan_times_ms.print(1, "Code Root Scanning (ms)");
 301     _last_obj_copy_times_ms.print(1, "Object Copy (ms)");
 302   }
 303   print_stats(1, "Code Root Fixup", _cur_collection_code_root_fixup_time_ms);
 304   print_stats(1, "Code Root Migration", _cur_strong_code_root_migration_time_ms);
 305   print_stats(1, "Code Root Purge", _cur_strong_code_root_purge_time_ms);
 306   print_stats(1, "Clear CT", _cur_clear_ct_time_ms);
 307   double misc_time_ms = pause_time_sec * MILLIUNITS - accounted_time_ms();
 308   print_stats(1, "Other", misc_time_ms);
 309   if (_cur_verify_before_time_ms > 0.0) {
 310     print_stats(2, "Verify Before", _cur_verify_before_time_ms);
 311   }










 312   print_stats(2, "Choose CSet",
 313     (_recorded_young_cset_choice_time_ms +
 314     _recorded_non_young_cset_choice_time_ms));
 315   print_stats(2, "Ref Proc", _cur_ref_proc_time_ms);
 316   print_stats(2, "Ref Enq", _cur_ref_enq_time_ms);
 317   if (G1DeferredRSUpdate) {
 318     print_stats(2, "Redirty Cards", _recorded_redirty_logged_cards_time_ms);
 319   }
 320   print_stats(2, "Free CSet",
 321     (_recorded_young_free_cset_time_ms +
 322     _recorded_non_young_free_cset_time_ms));
 323   if (G1Log::finest()) {
 324     print_stats(3, "Young Free CSet", _recorded_young_free_cset_time_ms);
 325     print_stats(3, "Non-Young Free CSet", _recorded_non_young_free_cset_time_ms);
 326   }
 327   if (_cur_verify_after_time_ms > 0.0) {
 328     print_stats(2, "Verify After", _cur_verify_after_time_ms);
 329   }
 330 }


 292       _last_satb_filtering_times_ms.print(1, "SATB Filtering (ms)");
 293     }
 294     if (_last_strong_code_root_mark_times_ms.sum() > 0.0) {
 295       _last_strong_code_root_mark_times_ms.print(1, "Code Root Marking (ms)");
 296     }
 297     _last_update_rs_times_ms.print(1, "Update RS (ms)");
 298       _last_update_rs_processed_buffers.print(2, "Processed Buffers");
 299     _last_scan_rs_times_ms.print(1, "Scan RS (ms)");
 300     _last_strong_code_root_scan_times_ms.print(1, "Code Root Scanning (ms)");
 301     _last_obj_copy_times_ms.print(1, "Object Copy (ms)");
 302   }
 303   print_stats(1, "Code Root Fixup", _cur_collection_code_root_fixup_time_ms);
 304   print_stats(1, "Code Root Migration", _cur_strong_code_root_migration_time_ms);
 305   print_stats(1, "Code Root Purge", _cur_strong_code_root_purge_time_ms);
 306   print_stats(1, "Clear CT", _cur_clear_ct_time_ms);
 307   double misc_time_ms = pause_time_sec * MILLIUNITS - accounted_time_ms();
 308   print_stats(1, "Other", misc_time_ms);
 309   if (_cur_verify_before_time_ms > 0.0) {
 310     print_stats(2, "Verify Before", _cur_verify_before_time_ms);
 311   }
 312   if (G1CollectedHeap::heap()->evacuation_failed()) {
 313     double evac_fail_handling = _cur_evac_fail_recalc_used + _cur_evac_fail_remove_self_forwards +
 314       _cur_evac_fail_restore_remsets;
 315     print_stats(2, "Evacuation Failure", evac_fail_handling);
 316     if (G1Log::finest()) {
 317       print_stats(3, "Recalculate Used", _cur_evac_fail_recalc_used);
 318       print_stats(3, "Remove Self Forwards", _cur_evac_fail_remove_self_forwards);
 319       print_stats(3, "Restore RemSet", _cur_evac_fail_restore_remsets);
 320     }
 321   }
 322   print_stats(2, "Choose CSet",
 323     (_recorded_young_cset_choice_time_ms +
 324     _recorded_non_young_cset_choice_time_ms));
 325   print_stats(2, "Ref Proc", _cur_ref_proc_time_ms);
 326   print_stats(2, "Ref Enq", _cur_ref_enq_time_ms);
 327   if (G1DeferredRSUpdate) {
 328     print_stats(2, "Redirty Cards", _recorded_redirty_logged_cards_time_ms);
 329   }
 330   print_stats(2, "Free CSet",
 331     (_recorded_young_free_cset_time_ms +
 332     _recorded_non_young_free_cset_time_ms));
 333   if (G1Log::finest()) {
 334     print_stats(3, "Young Free CSet", _recorded_young_free_cset_time_ms);
 335     print_stats(3, "Non-Young Free CSet", _recorded_non_young_free_cset_time_ms);
 336   }
 337   if (_cur_verify_after_time_ms > 0.0) {
 338     print_stats(2, "Verify After", _cur_verify_after_time_ms);
 339   }
 340 }