--- old/src/share/vm/gc/g1/concurrentMark.cpp 2015-06-23 14:41:46.671441167 +0200 +++ new/src/share/vm/gc/g1/concurrentMark.cpp 2015-06-23 14:41:46.559441171 +0200 @@ -1179,6 +1179,8 @@ }; void ConcurrentMark::scanRootRegions() { + double scan_start = os::elapsedTime(); + // Start of concurrent marking. ClassLoaderDataGraph::clear_claimed_marks(); @@ -1186,6 +1188,11 @@ // at least one root region to scan. So, if it's false, we // should not attempt to do any further work. if (root_regions()->scan_in_progress()) { + if (G1Log::fine()) { + gclog_or_tty->gclog_stamp(concurrent_gc_id()); + gclog_or_tty->print_cr("[GC concurrent-root-region-scan-start]"); + } + _parallel_marking_threads = calc_parallel_marking_threads(); assert(parallel_marking_threads() <= max_parallel_marking_threads(), "Maximum number of marking threads exceeded"); @@ -1195,6 +1202,11 @@ _parallel_workers->set_active_workers(active_workers); _parallel_workers->run_task(&task); + if (G1Log::fine()) { + gclog_or_tty->gclog_stamp(concurrent_gc_id()); + gclog_or_tty->print_cr("[GC concurrent-root-region-scan-end, %1.7lf secs]", os::elapsedTime() - scan_start); + } + // It's possible that has_aborted() is true here without actually // aborting the survivor scan earlier. This is OK as it's // mainly used for sanity checking. --- old/src/share/vm/gc/g1/concurrentMarkThread.cpp 2015-06-23 14:41:46.931441158 +0200 +++ new/src/share/vm/gc/g1/concurrentMarkThread.cpp 2015-06-23 14:41:46.815441162 +0200 @@ -122,13 +122,8 @@ // without the root regions have been scanned which would be a // correctness issue. - double scan_start = os::elapsedTime(); if (!cm()->has_aborted()) { - cm_log(G1Log::fine(), false, "[GC concurrent-root-region-scan-start]"); - _cm->scanRootRegions(); - - cm_log(G1Log::fine(), false, "[GC concurrent-root-region-scan-end, %1.7lf secs]", os::elapsedTime() - scan_start); } double mark_start_sec = os::elapsedTime();