--- old/src/share/vm/gc/g1/g1CollectedHeap.cpp 2016-04-11 17:32:15.650445032 +0200 +++ new/src/share/vm/gc/g1/g1CollectedHeap.cpp 2016-04-11 17:32:15.502439239 +0200 @@ -4462,7 +4462,11 @@ // object discovered by the STW ref processor. double preserve_cm_referents_time = 0.0; - if (_ref_processor_cm->has_discovered_references()) { + // To avoid spawning task when there is no work to do, check that + // a concurrent cycle is active and that some references have been + // discovered. + if (concurrent_mark()->cmThread()->during_cycle() && + ref_processor_cm()->has_discovered_references()) { double preserve_cm_referents_start = os::elapsedTime(); uint no_of_gc_workers = workers()->active_workers(); G1ParPreserveCMReferentsTask keep_cm_referents(this,