Executor service itself does not add much overhead to execution to threads. It just uses some synchronization mechanisms like semaphores to communicate to the threads. So, if you are facing some issues with the load, the problem lies somewhere else.
As long as the number of spawned threads is less than the machine's total CPU core count, overhead should be fairly low, although if they fight for I/O resources or something like that, it can be counter-productive.
Once you have more threads than cores, CPU-intensive code will suffer. I/O-intensive code is generally OK - as long as you don't stack them all up waiting on specific I/O resources.
I'm going to be a "small government" candidate. I'll be the government. Just me. No one else.