Quote out of the API doc:
* This invoker pools Threads and client connections to one server socket.
* The purpose is to avoid a bunch of failings of RMI.
* 1. Avoid making a client socket connection with every invocation call.
* This is very expensive. Also on windows if too many clients try
* to connect at the same time, you get connection refused exceptions.
* This invoker/proxy combo alleviates this.
* 2. Avoid creating a thread per invocation. The client/server connection
* is preserved and attached to the same thread.
* So we have connection pooling on the server and client side, and thread pooling
* on the server side. Pool, is an LRU pool, so resources should be cleaned up.
The invoker instance on client AND server side (stub and skeleton) has its own connection pool, which maximum size can be configured here.