--- old/src/share/vm/gc/shared/workgroup.cpp 2016-06-23 12:33:42.379511238 -0700 +++ new/src/share/vm/gc/shared/workgroup.cpp 2016-06-23 12:33:42.279511242 -0700 @@ -271,8 +271,11 @@ "Trying to execute task %s with %u workers which is more than the amount of total workers %u.", task->name(), num_workers, total_workers()); guarantee(num_workers > 0, "Trying to execute task %s with zero workers", task->name()); - add_workers(num_workers, false); - _dispatcher->coordinator_execute_on_workers(task, num_workers); + // num_workers may have been calculated based on different criteria + // than _active_workers so use num_workers limited by the number of + // created workers. + uint active_workers = MIN2(_created_workers, num_workers); + _dispatcher->coordinator_execute_on_workers(task, active_workers); } AbstractGangWorker::AbstractGangWorker(AbstractWorkGang* gang, uint id) {