< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahPhaseTimings.cpp

Print this page
rev 50076 : Fold Partial GC into Traversal GC


  55   if (!_policy->is_at_shutdown()) {
  56     _timing_data[phase]._secs.add((double)time_us / 1000 / 1000);
  57   }
  58 }
  59 
  60 void ShenandoahPhaseTimings::record_workers_start(Phase phase) {
  61   for (uint i = 0; i < GCParPhasesSentinel; i++) {
  62     _worker_times->reset(i);
  63   }
  64 }
  65 
  66 void ShenandoahPhaseTimings::record_workers_end(Phase phase) {
  67   if (_policy->is_at_shutdown()) {
  68     // Do not record the past-shutdown events
  69     return;
  70   }
  71 
  72   guarantee(phase == init_evac ||
  73             phase == scan_roots ||
  74             phase == update_roots ||
  75             phase == init_partial_gc_work ||
  76             phase == final_partial_gc_work ||
  77             phase == init_traversal_gc_work ||
  78             phase == final_traversal_gc_work ||
  79             phase == final_traversal_update_roots ||
  80             phase == final_update_refs_roots ||
  81             phase == full_gc_roots ||
  82             phase == _num_phases,
  83             "only in these phases we can add per-thread phase times");
  84   if (phase != _num_phases) {
  85     // Merge _phase_time to counters below the given phase.
  86     for (uint i = 0; i < GCParPhasesSentinel; i++) {
  87       double t = _worker_times->average(i);
  88       _timing_data[phase + i + 1]._secs.add(t);
  89     }
  90   }
  91 }
  92 
  93 void ShenandoahPhaseTimings::print_on(outputStream* out) const {
  94   out->cr();
  95   out->print_cr("GC STATISTICS:");
  96   out->print_cr("  \"(G)\" (gross) pauses include VM time: time to notify and block threads, do the pre-");


 230   _phase_names[full_gc_purge]                   = "    System Purge";
 231   _phase_names[full_gc_purge_class_unload]      = "      Unload Classes";
 232   _phase_names[full_gc_purge_par]               = "    Parallel Cleanup";
 233   _phase_names[full_gc_purge_par_codecache]     = "      Code Cache";
 234   _phase_names[full_gc_purge_par_symbstring]    = "      String/Symbol Tables";
 235   _phase_names[full_gc_purge_par_rmt]           = "      Resolved Methods";
 236   _phase_names[full_gc_purge_par_classes]       = "      Clean Classes";
 237   _phase_names[full_gc_purge_par_sync]          = "      Synchronization";
 238   _phase_names[full_gc_purge_cldg]              = "      CLDG";
 239   _phase_names[full_gc_purge_par_string_dedup]      = "    Purge String Dedup";
 240   _phase_names[full_gc_calculate_addresses]     = "  Calculate Addresses";
 241   _phase_names[full_gc_calculate_addresses_regular] = "    Regular Objects";
 242   _phase_names[full_gc_calculate_addresses_humong]  = "    Humongous Objects";
 243   _phase_names[full_gc_adjust_pointers]         = "  Adjust Pointers";
 244   _phase_names[full_gc_copy_objects]            = "  Copy Objects";
 245   _phase_names[full_gc_copy_objects_regular]    = "    Regular Objects";
 246   _phase_names[full_gc_copy_objects_humong]     = "    Humongous Objects";
 247   _phase_names[full_gc_update_str_dedup_table]  = "  Update String Dedup Table";
 248   _phase_names[full_gc_resize_tlabs]            = "  Resize TLABs";
 249 
 250   _phase_names[init_partial_gc_gross]           = "Pause Init Partial (G)";
 251   _phase_names[init_partial_gc]                 = "Pause Init Partial (N)";
 252   _phase_names[partial_gc_prepare]              = "  Prepare";
 253   _phase_names[init_partial_gc_work]            = "  Work";
 254   _phase_names[init_partial_gc_thread_roots]        = "    PI: Thread Roots";
 255   _phase_names[init_partial_gc_code_roots]          = "    PI: Code Cache Roots";
 256   _phase_names[init_partial_gc_string_table_roots]  = "    PI: String Table Roots";
 257   _phase_names[init_partial_gc_universe_roots]      = "    PI: Universe Roots";
 258   _phase_names[init_partial_gc_jni_roots]           = "    PI: JNI Roots";
 259   _phase_names[init_partial_gc_jni_weak_roots]      = "    PI: JNI Weak Roots";
 260   _phase_names[init_partial_gc_synchronizer_roots]  = "    PI: Synchronizer Roots";
 261   _phase_names[init_partial_gc_flat_profiler_roots] = "    PI: Flat Profiler Roots";
 262   _phase_names[init_partial_gc_management_roots]    = "    PI: Management Roots";
 263   _phase_names[init_partial_gc_system_dict_roots]   = "    PI: System Dict Roots";
 264   _phase_names[init_partial_gc_cldg_roots]          = "    PI: CLDG Roots";
 265   _phase_names[init_partial_gc_jvmti_roots]         = "    PI: JVMTI Roots";
 266   _phase_names[init_partial_gc_string_dedup_roots]  = "    PI: String Dedup Roots";
 267   _phase_names[init_partial_gc_finish_queues]       = "    PI: Finish Queues";
 268   _phase_names[final_partial_gc_gross]          = "Pause Final Partial (G)";
 269   _phase_names[final_partial_gc]                = "Pause Final Partial (N)";
 270   _phase_names[final_partial_gc_work]           = "  Work";
 271   _phase_names[final_partial_gc_thread_roots]        = "    PF: Thread Roots";
 272   _phase_names[final_partial_gc_code_roots]          = "    PF: Code Cache Roots";
 273   _phase_names[final_partial_gc_string_table_roots]  = "    PF: String Table Roots";
 274   _phase_names[final_partial_gc_universe_roots]      = "    PF: Universe Roots";
 275   _phase_names[final_partial_gc_jni_roots]           = "    PF: JNI Roots";
 276   _phase_names[final_partial_gc_jni_weak_roots]      = "    PF: JNI Weak Roots";
 277   _phase_names[final_partial_gc_synchronizer_roots]  = "    PF: Synchronizer Roots";
 278   _phase_names[final_partial_gc_flat_profiler_roots] = "    PF: Flat Profiler Roots";
 279   _phase_names[final_partial_gc_management_roots]    = "    PF: Management Roots";
 280   _phase_names[final_partial_gc_system_dict_roots]   = "    PF: System Dict Roots";
 281   _phase_names[final_partial_gc_cldg_roots]          = "    PF: CLDG Roots";
 282   _phase_names[final_partial_gc_jvmti_roots]         = "    PF: JVMTI Roots";
 283   _phase_names[final_partial_gc_string_dedup_roots]  = "    PF: String Dedup Roots";
 284   _phase_names[final_partial_gc_finish_queues]       = "    PF: Finish Queues";
 285 
 286   _phase_names[partial_gc_cleanup]              = "  Cleanup";
 287 
 288   _phase_names[init_traversal_gc_gross]           = "Pause Init Traversal (G)";
 289   _phase_names[init_traversal_gc]                 = "Pause Init Traversal (N)";
 290   _phase_names[traversal_gc_prepare]              = "  Prepare";
 291   _phase_names[init_traversal_gc_work]            = "  Work";
 292   _phase_names[init_traversal_gc_thread_roots]        = "    TI: Thread Roots";
 293   _phase_names[init_traversal_gc_code_roots]          = "    TI: Code Cache Roots";
 294   _phase_names[init_traversal_gc_string_table_roots]  = "    TI: String Table Roots";
 295   _phase_names[init_traversal_gc_universe_roots]      = "    TI: Universe Roots";
 296   _phase_names[init_traversal_gc_jni_roots]           = "    TI: JNI Roots";
 297   _phase_names[init_traversal_gc_jni_weak_roots]      = "    TI: JNI Weak Roots";
 298   _phase_names[init_traversal_gc_synchronizer_roots]  = "    TI: Synchronizer Roots";
 299   _phase_names[init_traversal_gc_flat_profiler_roots] = "    TI: Flat Profiler Roots";
 300   _phase_names[init_traversal_gc_management_roots]    = "    TI: Management Roots";
 301   _phase_names[init_traversal_gc_system_dict_roots]   = "    TI: System Dict Roots";
 302   _phase_names[init_traversal_gc_cldg_roots]          = "    TI: CLDG Roots";
 303   _phase_names[init_traversal_gc_jvmti_roots]         = "    TI: JVMTI Roots";
 304   _phase_names[init_traversal_gc_string_dedup_roots]  = "    TI: String Dedup Roots";
 305   _phase_names[init_traversal_gc_finish_queues]       = "    TI: Finish Queues";
 306   _phase_names[final_traversal_gc_gross]          = "Pause Final Traversal (G)";
 307   _phase_names[final_traversal_gc]                = "Pause Final Traversal (N)";


 330   _phase_names[final_traversal_update_synchronizer_roots]  = "    TU: Synchronizer Roots";
 331   _phase_names[final_traversal_update_flat_profiler_roots] = "    TU: Flat Profiler Roots";
 332   _phase_names[final_traversal_update_management_roots]    = "    TU: Management Roots";
 333   _phase_names[final_traversal_update_system_dict_roots]   = "    TU: System Dict Roots";
 334   _phase_names[final_traversal_update_cldg_roots]          = "    TU: CLDG Roots";
 335   _phase_names[final_traversal_update_jvmti_roots]         = "    TU: JVMTI Roots";
 336   _phase_names[final_traversal_update_string_dedup_roots]  = "    TU: String Dedup Roots";
 337   _phase_names[final_traversal_update_finish_queues]       = "    TU: Finish Queues";
 338 
 339   _phase_names[traversal_gc_cleanup]              = "  Cleanup";
 340 
 341   _phase_names[pause_other]                     = "Pause Other";
 342 
 343   _phase_names[conc_mark]                       = "Concurrent Marking";
 344   _phase_names[conc_preclean]                   = "Concurrent Precleaning";
 345   _phase_names[conc_evac]                       = "Concurrent Evacuation";
 346   _phase_names[conc_cleanup]                    = "Concurrent Cleanup";
 347   _phase_names[conc_cleanup_recycle]            = "  Recycle";
 348   _phase_names[conc_cleanup_reset_bitmaps]      = "  Reset Bitmaps";
 349   _phase_names[conc_other]                      = "Concurrent Other";
 350   _phase_names[conc_partial]                    = "Concurrent Partial";
 351   _phase_names[conc_traversal]                  = "Concurrent Traversal";
 352 
 353   _phase_names[init_update_refs_gross]          = "Pause Init  Update Refs (G)";
 354   _phase_names[init_update_refs]                = "Pause Init  Update Refs (N)";
 355   _phase_names[conc_update_refs]                = "Concurrent Update Refs";
 356   _phase_names[final_update_refs_gross]         = "Pause Final Update Refs (G)";
 357   _phase_names[final_update_refs]               = "Pause Final Update Refs (N)";
 358 
 359   _phase_names[final_update_refs_finish_work]          = "  Finish Work";
 360   _phase_names[final_update_refs_roots]                = "  Update Roots";
 361   _phase_names[final_update_refs_thread_roots]         = "    UR: Thread Roots";
 362   _phase_names[final_update_refs_code_roots]           = "    UR: Code Cache Roots";
 363   _phase_names[final_update_refs_string_table_roots]   = "    UR: String Table Roots";
 364   _phase_names[final_update_refs_universe_roots]       = "    UR: Universe Roots";
 365   _phase_names[final_update_refs_jni_roots]            = "    UR: JNI Roots";
 366   _phase_names[final_update_refs_jni_weak_roots]       = "    UR: JNI Weak Roots";
 367   _phase_names[final_update_refs_synchronizer_roots]   = "    UR: Synchronizer Roots";
 368   _phase_names[final_update_refs_flat_profiler_roots]  = "    UR: Flat Profiler Roots";
 369   _phase_names[final_update_refs_management_roots]     = "    UR: Management Roots";
 370   _phase_names[final_update_refs_system_dict_roots]    = "    UR: System Dict Roots";




  55   if (!_policy->is_at_shutdown()) {
  56     _timing_data[phase]._secs.add((double)time_us / 1000 / 1000);
  57   }
  58 }
  59 
  60 void ShenandoahPhaseTimings::record_workers_start(Phase phase) {
  61   for (uint i = 0; i < GCParPhasesSentinel; i++) {
  62     _worker_times->reset(i);
  63   }
  64 }
  65 
  66 void ShenandoahPhaseTimings::record_workers_end(Phase phase) {
  67   if (_policy->is_at_shutdown()) {
  68     // Do not record the past-shutdown events
  69     return;
  70   }
  71 
  72   guarantee(phase == init_evac ||
  73             phase == scan_roots ||
  74             phase == update_roots ||


  75             phase == init_traversal_gc_work ||
  76             phase == final_traversal_gc_work ||
  77             phase == final_traversal_update_roots ||
  78             phase == final_update_refs_roots ||
  79             phase == full_gc_roots ||
  80             phase == _num_phases,
  81             "only in these phases we can add per-thread phase times");
  82   if (phase != _num_phases) {
  83     // Merge _phase_time to counters below the given phase.
  84     for (uint i = 0; i < GCParPhasesSentinel; i++) {
  85       double t = _worker_times->average(i);
  86       _timing_data[phase + i + 1]._secs.add(t);
  87     }
  88   }
  89 }
  90 
  91 void ShenandoahPhaseTimings::print_on(outputStream* out) const {
  92   out->cr();
  93   out->print_cr("GC STATISTICS:");
  94   out->print_cr("  \"(G)\" (gross) pauses include VM time: time to notify and block threads, do the pre-");


 228   _phase_names[full_gc_purge]                   = "    System Purge";
 229   _phase_names[full_gc_purge_class_unload]      = "      Unload Classes";
 230   _phase_names[full_gc_purge_par]               = "    Parallel Cleanup";
 231   _phase_names[full_gc_purge_par_codecache]     = "      Code Cache";
 232   _phase_names[full_gc_purge_par_symbstring]    = "      String/Symbol Tables";
 233   _phase_names[full_gc_purge_par_rmt]           = "      Resolved Methods";
 234   _phase_names[full_gc_purge_par_classes]       = "      Clean Classes";
 235   _phase_names[full_gc_purge_par_sync]          = "      Synchronization";
 236   _phase_names[full_gc_purge_cldg]              = "      CLDG";
 237   _phase_names[full_gc_purge_par_string_dedup]      = "    Purge String Dedup";
 238   _phase_names[full_gc_calculate_addresses]     = "  Calculate Addresses";
 239   _phase_names[full_gc_calculate_addresses_regular] = "    Regular Objects";
 240   _phase_names[full_gc_calculate_addresses_humong]  = "    Humongous Objects";
 241   _phase_names[full_gc_adjust_pointers]         = "  Adjust Pointers";
 242   _phase_names[full_gc_copy_objects]            = "  Copy Objects";
 243   _phase_names[full_gc_copy_objects_regular]    = "    Regular Objects";
 244   _phase_names[full_gc_copy_objects_humong]     = "    Humongous Objects";
 245   _phase_names[full_gc_update_str_dedup_table]  = "  Update String Dedup Table";
 246   _phase_names[full_gc_resize_tlabs]            = "  Resize TLABs";
 247 






































 248   _phase_names[init_traversal_gc_gross]           = "Pause Init Traversal (G)";
 249   _phase_names[init_traversal_gc]                 = "Pause Init Traversal (N)";
 250   _phase_names[traversal_gc_prepare]              = "  Prepare";
 251   _phase_names[init_traversal_gc_work]            = "  Work";
 252   _phase_names[init_traversal_gc_thread_roots]        = "    TI: Thread Roots";
 253   _phase_names[init_traversal_gc_code_roots]          = "    TI: Code Cache Roots";
 254   _phase_names[init_traversal_gc_string_table_roots]  = "    TI: String Table Roots";
 255   _phase_names[init_traversal_gc_universe_roots]      = "    TI: Universe Roots";
 256   _phase_names[init_traversal_gc_jni_roots]           = "    TI: JNI Roots";
 257   _phase_names[init_traversal_gc_jni_weak_roots]      = "    TI: JNI Weak Roots";
 258   _phase_names[init_traversal_gc_synchronizer_roots]  = "    TI: Synchronizer Roots";
 259   _phase_names[init_traversal_gc_flat_profiler_roots] = "    TI: Flat Profiler Roots";
 260   _phase_names[init_traversal_gc_management_roots]    = "    TI: Management Roots";
 261   _phase_names[init_traversal_gc_system_dict_roots]   = "    TI: System Dict Roots";
 262   _phase_names[init_traversal_gc_cldg_roots]          = "    TI: CLDG Roots";
 263   _phase_names[init_traversal_gc_jvmti_roots]         = "    TI: JVMTI Roots";
 264   _phase_names[init_traversal_gc_string_dedup_roots]  = "    TI: String Dedup Roots";
 265   _phase_names[init_traversal_gc_finish_queues]       = "    TI: Finish Queues";
 266   _phase_names[final_traversal_gc_gross]          = "Pause Final Traversal (G)";
 267   _phase_names[final_traversal_gc]                = "Pause Final Traversal (N)";


 290   _phase_names[final_traversal_update_synchronizer_roots]  = "    TU: Synchronizer Roots";
 291   _phase_names[final_traversal_update_flat_profiler_roots] = "    TU: Flat Profiler Roots";
 292   _phase_names[final_traversal_update_management_roots]    = "    TU: Management Roots";
 293   _phase_names[final_traversal_update_system_dict_roots]   = "    TU: System Dict Roots";
 294   _phase_names[final_traversal_update_cldg_roots]          = "    TU: CLDG Roots";
 295   _phase_names[final_traversal_update_jvmti_roots]         = "    TU: JVMTI Roots";
 296   _phase_names[final_traversal_update_string_dedup_roots]  = "    TU: String Dedup Roots";
 297   _phase_names[final_traversal_update_finish_queues]       = "    TU: Finish Queues";
 298 
 299   _phase_names[traversal_gc_cleanup]              = "  Cleanup";
 300 
 301   _phase_names[pause_other]                     = "Pause Other";
 302 
 303   _phase_names[conc_mark]                       = "Concurrent Marking";
 304   _phase_names[conc_preclean]                   = "Concurrent Precleaning";
 305   _phase_names[conc_evac]                       = "Concurrent Evacuation";
 306   _phase_names[conc_cleanup]                    = "Concurrent Cleanup";
 307   _phase_names[conc_cleanup_recycle]            = "  Recycle";
 308   _phase_names[conc_cleanup_reset_bitmaps]      = "  Reset Bitmaps";
 309   _phase_names[conc_other]                      = "Concurrent Other";

 310   _phase_names[conc_traversal]                  = "Concurrent Traversal";
 311 
 312   _phase_names[init_update_refs_gross]          = "Pause Init  Update Refs (G)";
 313   _phase_names[init_update_refs]                = "Pause Init  Update Refs (N)";
 314   _phase_names[conc_update_refs]                = "Concurrent Update Refs";
 315   _phase_names[final_update_refs_gross]         = "Pause Final Update Refs (G)";
 316   _phase_names[final_update_refs]               = "Pause Final Update Refs (N)";
 317 
 318   _phase_names[final_update_refs_finish_work]          = "  Finish Work";
 319   _phase_names[final_update_refs_roots]                = "  Update Roots";
 320   _phase_names[final_update_refs_thread_roots]         = "    UR: Thread Roots";
 321   _phase_names[final_update_refs_code_roots]           = "    UR: Code Cache Roots";
 322   _phase_names[final_update_refs_string_table_roots]   = "    UR: String Table Roots";
 323   _phase_names[final_update_refs_universe_roots]       = "    UR: Universe Roots";
 324   _phase_names[final_update_refs_jni_roots]            = "    UR: JNI Roots";
 325   _phase_names[final_update_refs_jni_weak_roots]       = "    UR: JNI Weak Roots";
 326   _phase_names[final_update_refs_synchronizer_roots]   = "    UR: Synchronizer Roots";
 327   _phase_names[final_update_refs_flat_profiler_roots]  = "    UR: Flat Profiler Roots";
 328   _phase_names[final_update_refs_management_roots]     = "    UR: Management Roots";
 329   _phase_names[final_update_refs_system_dict_roots]    = "    UR: System Dict Roots";


< prev index next >