--- 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
}
}