--- old/src/share/vm/gc/shenandoah/shenandoahConcurrentThread.cpp 2016-12-19 17:24:26.103578209 +0100 +++ new/src/share/vm/gc/shenandoah/shenandoahConcurrentThread.cpp 2016-12-19 17:24:26.025579194 +0100 @@ -54,6 +54,10 @@ service_fullgc_cycle(); } else if (heap->shenandoahPolicy()->should_start_concurrent_mark(heap->used(), heap->capacity())) { service_normal_cycle(); + if (heap->is_evacuation_in_progress()) { + MutexLocker mu(Threads_lock); + heap->set_evacuation_in_progress(false); + } } else { Thread::current()->_ParkEvent->park(10); } @@ -142,11 +146,6 @@ } // Prepare for the next normal cycle: - if (heap->is_evacuation_in_progress()) { - MutexLocker mu(Threads_lock); - heap->set_evacuation_in_progress(false); - } - if (check_cancellation()) return; heap->shenandoahPolicy()->record_phase_start(ShenandoahCollectorPolicy::reset_bitmaps);