59 CMRefRoots, 60 MergeER, 61 MergeRS, 62 OptMergeRS, 63 MergeLB, 64 MergeHCC, 65 ScanHR, 66 OptScanHR, 67 CodeRoots, 68 OptCodeRoots, 69 ObjCopy, 70 OptObjCopy, 71 Termination, 72 OptTermination, 73 Other, 74 GCWorkerTotal, 75 GCWorkerEnd, 76 StringDedupQueueFixup, 77 StringDedupTableFixup, 78 RedirtyCards, 79 YoungFreeCSet, 80 NonYoungFreeCSet, 81 MergePSS, 82 GCParPhasesSentinel 83 }; 84 85 static const GCParPhases ExtRootScanSubPhasesFirst = ThreadRoots; 86 static const GCParPhases ExtRootScanSubPhasesLast = CMRefRoots; 87 88 enum GCMergeRSWorkTimes { 89 MergeRSMergedSparse, 90 MergeRSMergedFine, 91 MergeRSMergedCoarse 92 }; 93 94 enum GCScanHRWorkItems { 95 ScanHRScannedCards, 96 ScanHRScannedBlocks, 97 ScanHRClaimedChunks, 98 ScanHRScannedOptRefs, 99 ScanHRUsedMemory 100 }; 187 188 double _recorded_prepare_heap_roots_time_ms; 189 190 double _recorded_clear_claimed_marks_time_ms; 191 192 double _recorded_young_cset_choice_time_ms; 193 double _recorded_non_young_cset_choice_time_ms; 194 195 double _recorded_redirty_logged_cards_time_ms; 196 197 double _recorded_preserve_cm_referents_time_ms; 198 199 double _recorded_merge_pss_time_ms; 200 201 double _recorded_start_new_cset_time_ms; 202 203 double _recorded_total_free_cset_time_ms; 204 205 double _recorded_serial_free_cset_time_ms; 206 207 double _cur_region_register_time; 208 209 double _cur_fast_reclaim_humongous_time_ms; 210 size_t _cur_fast_reclaim_humongous_total; 211 size_t _cur_fast_reclaim_humongous_candidates; 212 size_t _cur_fast_reclaim_humongous_reclaimed; 213 214 double _cur_verify_before_time_ms; 215 double _cur_verify_after_time_ms; 216 217 ReferenceProcessorPhaseTimes _ref_phase_times; 218 WeakProcessorPhaseTimes _weak_phase_times; 219 220 double worker_time(GCParPhases phase, uint worker); 221 void note_gc_end(); 222 void reset(); 223 224 template <class T> 225 void details(T* phase, const char* indent) const; 226 334 void record_string_deduplication_time(double ms) { 335 _cur_string_deduplication_time_ms = ms; 336 } 337 338 void record_ref_proc_time(double ms) { 339 _cur_ref_proc_time_ms = ms; 340 } 341 342 void record_root_region_scan_wait_time(double time_ms) { 343 _root_region_scan_wait_time_ms = time_ms; 344 } 345 346 void record_total_free_cset_time_ms(double time_ms) { 347 _recorded_total_free_cset_time_ms = time_ms; 348 } 349 350 void record_serial_free_cset_time_ms(double time_ms) { 351 _recorded_serial_free_cset_time_ms = time_ms; 352 } 353 354 void record_register_regions(double time_ms, size_t total, size_t candidates) { 355 _cur_region_register_time = time_ms; 356 _cur_fast_reclaim_humongous_total = total; 357 _cur_fast_reclaim_humongous_candidates = candidates; 358 } 359 360 void record_fast_reclaim_humongous_time_ms(double value, size_t reclaimed) { 361 _cur_fast_reclaim_humongous_time_ms = value; 362 _cur_fast_reclaim_humongous_reclaimed = reclaimed; 363 } 364 365 void record_young_cset_choice_time_ms(double time_ms) { 366 _recorded_young_cset_choice_time_ms = time_ms; 367 } 368 369 void record_non_young_cset_choice_time_ms(double time_ms) { 370 _recorded_non_young_cset_choice_time_ms = time_ms; 371 } 372 373 void record_redirty_logged_cards_time_ms(double time_ms) { 415 } 416 417 double cur_clear_ct_time_ms() { 418 return _cur_clear_ct_time_ms; 419 } 420 421 double cur_expand_heap_time_ms() { 422 return _cur_expand_heap_time_ms; 423 } 424 425 double root_region_scan_wait_time_ms() { 426 return _root_region_scan_wait_time_ms; 427 } 428 429 double young_cset_choice_time_ms() { 430 return _recorded_young_cset_choice_time_ms; 431 } 432 433 double total_free_cset_time_ms() { 434 return _recorded_total_free_cset_time_ms; 435 } 436 437 double non_young_cset_choice_time_ms() { 438 return _recorded_non_young_cset_choice_time_ms; 439 } 440 441 double fast_reclaim_humongous_time_ms() { 442 return _cur_fast_reclaim_humongous_time_ms; 443 } 444 445 size_t fast_reclaim_humongous_candidates() const { 446 return _cur_fast_reclaim_humongous_candidates; 447 } 448 449 ReferenceProcessorPhaseTimes* ref_phase_times() { return &_ref_phase_times; } 450 451 WeakProcessorPhaseTimes* weak_phase_times() { return &_weak_phase_times; } 452 }; 453 454 class G1EvacPhaseWithTrimTimeTracker : public StackObj { | 59 CMRefRoots, 60 MergeER, 61 MergeRS, 62 OptMergeRS, 63 MergeLB, 64 MergeHCC, 65 ScanHR, 66 OptScanHR, 67 CodeRoots, 68 OptCodeRoots, 69 ObjCopy, 70 OptObjCopy, 71 Termination, 72 OptTermination, 73 Other, 74 GCWorkerTotal, 75 GCWorkerEnd, 76 StringDedupQueueFixup, 77 StringDedupTableFixup, 78 RedirtyCards, 79 ParFreeCSet, 80 YoungFreeCSet, 81 NonYoungFreeCSet, 82 RebuildFreeList, 83 MergePSS, 84 GCParPhasesSentinel 85 }; 86 87 static const GCParPhases ExtRootScanSubPhasesFirst = ThreadRoots; 88 static const GCParPhases ExtRootScanSubPhasesLast = CMRefRoots; 89 90 enum GCMergeRSWorkTimes { 91 MergeRSMergedSparse, 92 MergeRSMergedFine, 93 MergeRSMergedCoarse 94 }; 95 96 enum GCScanHRWorkItems { 97 ScanHRScannedCards, 98 ScanHRScannedBlocks, 99 ScanHRClaimedChunks, 100 ScanHRScannedOptRefs, 101 ScanHRUsedMemory 102 }; 189 190 double _recorded_prepare_heap_roots_time_ms; 191 192 double _recorded_clear_claimed_marks_time_ms; 193 194 double _recorded_young_cset_choice_time_ms; 195 double _recorded_non_young_cset_choice_time_ms; 196 197 double _recorded_redirty_logged_cards_time_ms; 198 199 double _recorded_preserve_cm_referents_time_ms; 200 201 double _recorded_merge_pss_time_ms; 202 203 double _recorded_start_new_cset_time_ms; 204 205 double _recorded_total_free_cset_time_ms; 206 207 double _recorded_serial_free_cset_time_ms; 208 209 double _recorded_total_rebuild_freelist_time_ms; 210 211 double _recorded_serial_rebuild_freelist_time_ms; 212 213 double _cur_region_register_time; 214 215 double _cur_fast_reclaim_humongous_time_ms; 216 size_t _cur_fast_reclaim_humongous_total; 217 size_t _cur_fast_reclaim_humongous_candidates; 218 size_t _cur_fast_reclaim_humongous_reclaimed; 219 220 double _cur_verify_before_time_ms; 221 double _cur_verify_after_time_ms; 222 223 ReferenceProcessorPhaseTimes _ref_phase_times; 224 WeakProcessorPhaseTimes _weak_phase_times; 225 226 double worker_time(GCParPhases phase, uint worker); 227 void note_gc_end(); 228 void reset(); 229 230 template <class T> 231 void details(T* phase, const char* indent) const; 232 340 void record_string_deduplication_time(double ms) { 341 _cur_string_deduplication_time_ms = ms; 342 } 343 344 void record_ref_proc_time(double ms) { 345 _cur_ref_proc_time_ms = ms; 346 } 347 348 void record_root_region_scan_wait_time(double time_ms) { 349 _root_region_scan_wait_time_ms = time_ms; 350 } 351 352 void record_total_free_cset_time_ms(double time_ms) { 353 _recorded_total_free_cset_time_ms = time_ms; 354 } 355 356 void record_serial_free_cset_time_ms(double time_ms) { 357 _recorded_serial_free_cset_time_ms = time_ms; 358 } 359 360 void record_total_rebuild_freelist_time_ms(double time_ms) { 361 _recorded_total_rebuild_freelist_time_ms = time_ms; 362 } 363 364 void record_serial_rebuild_freelist_time_ms(double time_ms) { 365 _recorded_serial_rebuild_freelist_time_ms = time_ms; 366 } 367 368 void record_register_regions(double time_ms, size_t total, size_t candidates) { 369 _cur_region_register_time = time_ms; 370 _cur_fast_reclaim_humongous_total = total; 371 _cur_fast_reclaim_humongous_candidates = candidates; 372 } 373 374 void record_fast_reclaim_humongous_time_ms(double value, size_t reclaimed) { 375 _cur_fast_reclaim_humongous_time_ms = value; 376 _cur_fast_reclaim_humongous_reclaimed = reclaimed; 377 } 378 379 void record_young_cset_choice_time_ms(double time_ms) { 380 _recorded_young_cset_choice_time_ms = time_ms; 381 } 382 383 void record_non_young_cset_choice_time_ms(double time_ms) { 384 _recorded_non_young_cset_choice_time_ms = time_ms; 385 } 386 387 void record_redirty_logged_cards_time_ms(double time_ms) { 429 } 430 431 double cur_clear_ct_time_ms() { 432 return _cur_clear_ct_time_ms; 433 } 434 435 double cur_expand_heap_time_ms() { 436 return _cur_expand_heap_time_ms; 437 } 438 439 double root_region_scan_wait_time_ms() { 440 return _root_region_scan_wait_time_ms; 441 } 442 443 double young_cset_choice_time_ms() { 444 return _recorded_young_cset_choice_time_ms; 445 } 446 447 double total_free_cset_time_ms() { 448 return _recorded_total_free_cset_time_ms; 449 } 450 451 double total_rebuild_freelist_time_ms() { 452 return _recorded_total_rebuild_freelist_time_ms; 453 } 454 455 double non_young_cset_choice_time_ms() { 456 return _recorded_non_young_cset_choice_time_ms; 457 } 458 459 double fast_reclaim_humongous_time_ms() { 460 return _cur_fast_reclaim_humongous_time_ms; 461 } 462 463 size_t fast_reclaim_humongous_candidates() const { 464 return _cur_fast_reclaim_humongous_candidates; 465 } 466 467 ReferenceProcessorPhaseTimes* ref_phase_times() { return &_ref_phase_times; } 468 469 WeakProcessorPhaseTimes* weak_phase_times() { return &_weak_phase_times; } 470 }; 471 472 class G1EvacPhaseWithTrimTimeTracker : public StackObj { |