--- old/src/share/vm/gc/g1/concurrentMark.cpp 2015-12-14 21:50:28.778701613 -0800 +++ new/src/share/vm/gc/g1/concurrentMark.cpp 2015-12-14 21:50:28.698701616 -0800 @@ -436,6 +436,7 @@ _has_aborted(false), _restart_for_overflow(false), _concurrent_marking_in_progress(false), + _concurrent_marking_from_roots(false), // _verbose_level set below @@ -1003,6 +1004,18 @@ } } +void ConcurrentMark::register_mark_from_roots_phase_start() { + _concurrent_marking_from_roots = true; + _g1h->gc_timer_cm()->register_gc_concurrent_start("Concurrent Mark"); +} + +void ConcurrentMark::register_mark_from_roots_phase_end() { + _concurrent_marking_from_roots = false; + if (!has_aborted()) { + _g1h->gc_timer_cm()->register_gc_concurrent_end(); + } +} + void ConcurrentMark::markFromRoots() { // we might be tempted to assert that: // assert(asynch == !SafepointSynchronize::is_at_safepoint(), @@ -1011,6 +1024,8 @@ // a safepoint is indeed in progress as a younger generation // stop-the-world GC happens even as we mark in this generation. + register_mark_from_roots_phase_start(); + _restart_for_overflow = false; // _g1h has _n_par_threads @@ -1027,6 +1042,9 @@ CMConcurrentMarkingTask markingTask(this, cmThread()); _parallel_workers->set_active_workers(active_workers); _parallel_workers->run_task(&markingTask); + + register_mark_from_roots_phase_end(); + print_stats(); }