diff -r 7f63c74f0974 -r 8f1d5d706bdd src/hotspot/share/gc/cms/parNewGeneration.cpp --- a/src/hotspot/share/gc/cms/parNewGeneration.cpp Tue May 29 09:26:00 2018 +0200 +++ b/src/hotspot/share/gc/cms/parNewGeneration.cpp Mon Jun 18 12:11:59 2018 +0200 @@ -793,14 +793,17 @@ par_scan_state.evacuate_followers_closure()); } -void ParNewRefProcTaskExecutor::execute(ProcessTask& task) { +void ParNewRefProcTaskExecutor::execute(ProcessTask& task, uint ergo_workers) { CMSHeap* gch = CMSHeap::heap(); WorkGang* workers = gch->workers(); assert(workers != NULL, "Need parallel worker threads."); + assert(workers->active_workers() == ergo_workers, + "Ergonomically chosen workers (%u) must be equal to active workers (%u)", + ergo_workers, workers->active_workers()); _state_set.reset(workers->active_workers(), _young_gen.promotion_failed()); ParNewRefProcTaskProxy rp_task(task, _young_gen, _old_gen, _young_gen.reserved().end(), _state_set); - workers->run_task(&rp_task); + workers->run_task(&rp_task, workers->active_workers()); _state_set.reset(0 /* bad value in debug if not reset */, _young_gen.promotion_failed()); } @@ -1450,7 +1453,8 @@ refs_discovery_is_mt(), // mt discovery ParallelGCThreads, // mt discovery degree refs_discovery_is_atomic(), // atomic_discovery - NULL); // is_alive_non_header + NULL, // is_alive_non_header + false); // disable adjusting number of processing threads } }