50 _gc_par_phases[JNIRoots] = new WorkerDataArray<double>(max_gc_threads, "JNI Handles Roots (ms):"); 51 _gc_par_phases[ObjectSynchronizerRoots] = new WorkerDataArray<double>(max_gc_threads, "ObjectSynchronizer Roots (ms):"); 52 _gc_par_phases[FlatProfilerRoots] = new WorkerDataArray<double>(max_gc_threads, "FlatProfiler Roots (ms):"); 53 _gc_par_phases[ManagementRoots] = new WorkerDataArray<double>(max_gc_threads, "Management Roots (ms):"); 54 _gc_par_phases[SystemDictionaryRoots] = new WorkerDataArray<double>(max_gc_threads, "SystemDictionary Roots (ms):"); 55 _gc_par_phases[CLDGRoots] = new WorkerDataArray<double>(max_gc_threads, "CLDG Roots (ms):"); 56 _gc_par_phases[JVMTIRoots] = new WorkerDataArray<double>(max_gc_threads, "JVMTI Roots (ms):"); 57 _gc_par_phases[CMRefRoots] = new WorkerDataArray<double>(max_gc_threads, "CM RefProcessor Roots (ms):"); 58 _gc_par_phases[WaitForStrongCLD] = new WorkerDataArray<double>(max_gc_threads, "Wait For Strong CLD (ms):"); 59 _gc_par_phases[WeakCLDRoots] = new WorkerDataArray<double>(max_gc_threads, "Weak CLD Roots (ms):"); 60 _gc_par_phases[SATBFiltering] = new WorkerDataArray<double>(max_gc_threads, "SATB Filtering (ms):"); 61 62 _gc_par_phases[UpdateRS] = new WorkerDataArray<double>(max_gc_threads, "Update RS (ms):"); 63 if (G1HotCardCache::default_use_cache()) { 64 _gc_par_phases[ScanHCC] = new WorkerDataArray<double>(max_gc_threads, "Scan HCC (ms):"); 65 } else { 66 _gc_par_phases[ScanHCC] = NULL; 67 } 68 _gc_par_phases[ScanRS] = new WorkerDataArray<double>(max_gc_threads, "Scan RS (ms):"); 69 _gc_par_phases[CodeRoots] = new WorkerDataArray<double>(max_gc_threads, "Code Root Scanning (ms):"); 70 _gc_par_phases[ObjCopy] = new WorkerDataArray<double>(max_gc_threads, "Object Copy (ms):"); 71 _gc_par_phases[Termination] = new WorkerDataArray<double>(max_gc_threads, "Termination (ms):"); 72 _gc_par_phases[GCWorkerTotal] = new WorkerDataArray<double>(max_gc_threads, "GC Worker Total (ms):"); 73 _gc_par_phases[GCWorkerEnd] = new WorkerDataArray<double>(max_gc_threads, "GC Worker End (ms):"); 74 _gc_par_phases[Other] = new WorkerDataArray<double>(max_gc_threads, "GC Worker Other (ms):"); 75 76 _update_rs_processed_buffers = new WorkerDataArray<size_t>(max_gc_threads, "Processed Buffers:"); 77 _gc_par_phases[UpdateRS]->link_thread_work_items(_update_rs_processed_buffers); 78 79 _termination_attempts = new WorkerDataArray<size_t>(max_gc_threads, "Termination Attempts:"); 80 _gc_par_phases[Termination]->link_thread_work_items(_termination_attempts); 81 82 if (UseStringDeduplication) { 83 _gc_par_phases[StringDedupQueueFixup] = new WorkerDataArray<double>(max_gc_threads, "Queue Fixup (ms):"); 84 _gc_par_phases[StringDedupTableFixup] = new WorkerDataArray<double>(max_gc_threads, "Table Fixup (ms):"); 85 } else { 86 _gc_par_phases[StringDedupQueueFixup] = NULL; 87 _gc_par_phases[StringDedupTableFixup] = NULL; 88 } 89 247 void G1GCPhaseTimes::print() { 248 note_gc_end(); 249 250 double accounted_time_ms = _external_accounted_time_ms; 251 if (_root_region_scan_wait_time_ms > 0.0) { 252 info_line_and_account("Root Region Scan Waiting", _root_region_scan_wait_time_ms); 253 } 254 255 info_line_and_account("Evacuate Collection Set", _cur_collection_par_time_ms); 256 trace_phase(_gc_par_phases[GCWorkerStart], false); 257 debug_phase(_gc_par_phases[ExtRootScan]); 258 for (int i = ThreadRoots; i <= SATBFiltering; i++) { 259 trace_phase(_gc_par_phases[i]); 260 } 261 debug_phase(_gc_par_phases[UpdateRS]); 262 if (G1HotCardCache::default_use_cache()) { 263 trace_phase(_gc_par_phases[ScanHCC]); 264 } 265 debug_phase(_gc_par_phases[ScanRS]); 266 debug_phase(_gc_par_phases[CodeRoots]); 267 debug_phase(_gc_par_phases[ObjCopy]); 268 debug_phase(_gc_par_phases[Termination]); 269 debug_phase(_gc_par_phases[Other]); 270 debug_phase(_gc_par_phases[GCWorkerTotal]); 271 trace_phase(_gc_par_phases[GCWorkerEnd], false); 272 273 info_line_and_account("Code Roots", _cur_collection_code_root_fixup_time_ms + _cur_strong_code_root_purge_time_ms); 274 debug_line("Code Roots Fixup", _cur_collection_code_root_fixup_time_ms); 275 debug_line("Code Roots Purge", _cur_strong_code_root_purge_time_ms); 276 277 if (G1StringDedup::is_enabled()) { 278 info_line_and_account("String Dedup Fixup", _cur_string_dedup_fixup_time_ms); 279 debug_phase(_gc_par_phases[StringDedupQueueFixup]); 280 debug_phase(_gc_par_phases[StringDedupTableFixup]); 281 } 282 info_line_and_account("Clear Card Table", _cur_clear_ct_time_ms); 283 info_line_and_account("Expand Heap After Collection", _cur_expand_heap_time_ms); 284 285 info_line_and_account("Free Collection Set", _recorded_total_free_cset_time_ms); 286 debug_line("Free Collection Set Serial", _recorded_serial_free_cset_time_ms); | 50 _gc_par_phases[JNIRoots] = new WorkerDataArray<double>(max_gc_threads, "JNI Handles Roots (ms):"); 51 _gc_par_phases[ObjectSynchronizerRoots] = new WorkerDataArray<double>(max_gc_threads, "ObjectSynchronizer Roots (ms):"); 52 _gc_par_phases[FlatProfilerRoots] = new WorkerDataArray<double>(max_gc_threads, "FlatProfiler Roots (ms):"); 53 _gc_par_phases[ManagementRoots] = new WorkerDataArray<double>(max_gc_threads, "Management Roots (ms):"); 54 _gc_par_phases[SystemDictionaryRoots] = new WorkerDataArray<double>(max_gc_threads, "SystemDictionary Roots (ms):"); 55 _gc_par_phases[CLDGRoots] = new WorkerDataArray<double>(max_gc_threads, "CLDG Roots (ms):"); 56 _gc_par_phases[JVMTIRoots] = new WorkerDataArray<double>(max_gc_threads, "JVMTI Roots (ms):"); 57 _gc_par_phases[CMRefRoots] = new WorkerDataArray<double>(max_gc_threads, "CM RefProcessor Roots (ms):"); 58 _gc_par_phases[WaitForStrongCLD] = new WorkerDataArray<double>(max_gc_threads, "Wait For Strong CLD (ms):"); 59 _gc_par_phases[WeakCLDRoots] = new WorkerDataArray<double>(max_gc_threads, "Weak CLD Roots (ms):"); 60 _gc_par_phases[SATBFiltering] = new WorkerDataArray<double>(max_gc_threads, "SATB Filtering (ms):"); 61 62 _gc_par_phases[UpdateRS] = new WorkerDataArray<double>(max_gc_threads, "Update RS (ms):"); 63 if (G1HotCardCache::default_use_cache()) { 64 _gc_par_phases[ScanHCC] = new WorkerDataArray<double>(max_gc_threads, "Scan HCC (ms):"); 65 } else { 66 _gc_par_phases[ScanHCC] = NULL; 67 } 68 _gc_par_phases[ScanRS] = new WorkerDataArray<double>(max_gc_threads, "Scan RS (ms):"); 69 _gc_par_phases[CodeRoots] = new WorkerDataArray<double>(max_gc_threads, "Code Root Scanning (ms):"); 70 #if INCLUDE_AOT 71 _gc_par_phases[AOTCodeRoots] = new WorkerDataArray<double>(max_gc_threads, "AOT Root Scanning (ms):"); 72 #endif 73 _gc_par_phases[ObjCopy] = new WorkerDataArray<double>(max_gc_threads, "Object Copy (ms):"); 74 _gc_par_phases[Termination] = new WorkerDataArray<double>(max_gc_threads, "Termination (ms):"); 75 _gc_par_phases[GCWorkerTotal] = new WorkerDataArray<double>(max_gc_threads, "GC Worker Total (ms):"); 76 _gc_par_phases[GCWorkerEnd] = new WorkerDataArray<double>(max_gc_threads, "GC Worker End (ms):"); 77 _gc_par_phases[Other] = new WorkerDataArray<double>(max_gc_threads, "GC Worker Other (ms):"); 78 79 _update_rs_processed_buffers = new WorkerDataArray<size_t>(max_gc_threads, "Processed Buffers:"); 80 _gc_par_phases[UpdateRS]->link_thread_work_items(_update_rs_processed_buffers); 81 82 _termination_attempts = new WorkerDataArray<size_t>(max_gc_threads, "Termination Attempts:"); 83 _gc_par_phases[Termination]->link_thread_work_items(_termination_attempts); 84 85 if (UseStringDeduplication) { 86 _gc_par_phases[StringDedupQueueFixup] = new WorkerDataArray<double>(max_gc_threads, "Queue Fixup (ms):"); 87 _gc_par_phases[StringDedupTableFixup] = new WorkerDataArray<double>(max_gc_threads, "Table Fixup (ms):"); 88 } else { 89 _gc_par_phases[StringDedupQueueFixup] = NULL; 90 _gc_par_phases[StringDedupTableFixup] = NULL; 91 } 92 250 void G1GCPhaseTimes::print() { 251 note_gc_end(); 252 253 double accounted_time_ms = _external_accounted_time_ms; 254 if (_root_region_scan_wait_time_ms > 0.0) { 255 info_line_and_account("Root Region Scan Waiting", _root_region_scan_wait_time_ms); 256 } 257 258 info_line_and_account("Evacuate Collection Set", _cur_collection_par_time_ms); 259 trace_phase(_gc_par_phases[GCWorkerStart], false); 260 debug_phase(_gc_par_phases[ExtRootScan]); 261 for (int i = ThreadRoots; i <= SATBFiltering; i++) { 262 trace_phase(_gc_par_phases[i]); 263 } 264 debug_phase(_gc_par_phases[UpdateRS]); 265 if (G1HotCardCache::default_use_cache()) { 266 trace_phase(_gc_par_phases[ScanHCC]); 267 } 268 debug_phase(_gc_par_phases[ScanRS]); 269 debug_phase(_gc_par_phases[CodeRoots]); 270 #if INCLUDE_AOT 271 debug_phase(_gc_par_phases[AOTCodeRoots]); 272 #endif 273 debug_phase(_gc_par_phases[ObjCopy]); 274 debug_phase(_gc_par_phases[Termination]); 275 debug_phase(_gc_par_phases[Other]); 276 debug_phase(_gc_par_phases[GCWorkerTotal]); 277 trace_phase(_gc_par_phases[GCWorkerEnd], false); 278 279 info_line_and_account("Code Roots", _cur_collection_code_root_fixup_time_ms + _cur_strong_code_root_purge_time_ms); 280 debug_line("Code Roots Fixup", _cur_collection_code_root_fixup_time_ms); 281 debug_line("Code Roots Purge", _cur_strong_code_root_purge_time_ms); 282 283 if (G1StringDedup::is_enabled()) { 284 info_line_and_account("String Dedup Fixup", _cur_string_dedup_fixup_time_ms); 285 debug_phase(_gc_par_phases[StringDedupQueueFixup]); 286 debug_phase(_gc_par_phases[StringDedupTableFixup]); 287 } 288 info_line_and_account("Clear Card Table", _cur_clear_ct_time_ms); 289 info_line_and_account("Expand Heap After Collection", _cur_expand_heap_time_ms); 290 291 info_line_and_account("Free Collection Set", _recorded_total_free_cset_time_ms); 292 debug_line("Free Collection Set Serial", _recorded_serial_free_cset_time_ms); |