1

我有这个对象池(使用 org.apache.commons.pool2),我从中借用(或创建)一个。

我设置的最大空闲大小为 3(最大大小为 5)。设置的前提是如果空闲对象超过 3 个,这些对象将被销毁 (BasePooledObjectFactory#destroyObject)

这在我的系统中所做的是它创建和销毁了几个对象,这很昂贵。我只希望它在空闲较长时间(比如 1 分钟)时被销毁。

我尝试设置 setMinEvictableIdleTimeMillis(我可以看到的默认值为 30 分钟)来执行此操作。默认值以及设置似乎都不起作用 - 因为我可以看到当空闲计数超过 4 时,对象经常被销毁。

为什么会发生这种情况,我怎样才能确保空闲对象不会经常被破坏?

4

1 回答 1

0

仅使用minEvictableIdleTimeMillis是不够的

您还必须指定timeBetweenEvictionRunsMillis默认为 -1。

池对象被验证/清理线程逐出,因此timeBetweenEvictionRunsMillis将使该线程运行,因此它将检查minEvictableIdleTimeMillis理想线程的存在并逐出它们。

于 2021-10-01T14:46:15.450 回答