Hi,
if numTestsPerEvictionRun is set to n and there are less than n idle objects in the pool, the evictor thread will still make n tests on these objects in a round-robin manner, i.e. idle objects can be tested more than once per eviction run. As this also includes validity tests if testWhileIdle is enbabled and validity tests may be time-consuming, this is a rather unwanted behavior.
Instead of testing getNumTests() objects, the pool should test min(_pool.size(),getNumTests()) objects per eviction run.
Thomas Schürger already reported this bug for GenericObjectPool (see
POOL-6). I found out now, that this bug still exists for GenericKeyedObjectPool. Apparently,
POOL-6 only solved the bug in GenericObjectPool.