--- old/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp 2018-10-15 15:13:13.657398191 +0200 +++ new/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp 2018-10-15 15:13:13.505399220 +0200 @@ -1545,7 +1545,11 @@ // and overflow handling in G1CMTask::do_marking_step() knows // how many workers to wait for. _cm->set_concurrency(ergo_workers); - _workers->run_task(&proc_task_proxy, ergo_workers); + if (ergo_workers == 1) { + proc_task_proxy.work(0); + } else { + _workers->run_task(&proc_task_proxy, ergo_workers); + } } void G1ConcurrentMark::weak_refs_work(bool clear_all_soft_refs) {