--- old/src/share/vm/gc/g1/g1CollectedHeap.cpp 2015-12-14 21:50:29.614701584 -0800 +++ new/src/share/vm/gc/g1/g1CollectedHeap.cpp 2015-12-14 21:50:29.518701588 -0800 @@ -2327,16 +2327,21 @@ void G1CollectedHeap::register_concurrent_cycle_end() { if (collector_state()->concurrent_cycle_started()) { + Ticks end_tick = Ticks::now(); GCIdMarkAndRestore conc_gc_id_mark(_cmThread->gc_id()); if (_cm->has_aborted()) { _gc_tracer_cm->report_concurrent_mode_failure(); + + if (_cm->concurrent_marking_from_roots()) { + _gc_timer_cm->register_gc_concurrent_end(end_tick); + } } - _gc_timer_cm->register_gc_end(); + _gc_timer_cm->register_gc_end(end_tick); _gc_tracer_cm->report_gc_end(_gc_timer_cm->gc_end(), _gc_timer_cm->time_partitions()); // Clear state variables to prepare for the next concurrent cycle. - collector_state()->set_concurrent_cycle_started(false); + collector_state()->set_concurrent_cycle_started(false); _heap_summary_sent = false; } }