我有这个对象池(使用org.apache.commons.pool2),我从其中借用(或创建)一个。
我设置的最大空闲大小是3(最大大小是5)。这是基于这样的理解设置的:如果存在超过3个的空闲对象,则这些对象将被销毁(BasePooledObjectFactory#destroyObject)
这在我的系统中所做的是,它创建和销毁几个对象,这是昂贵的。我只希望它在空闲较长时间(比如1分钟)时被销毁。
我尝试设置setMinEvictableIdleTimeMillis (默认值是30分钟,我可以看到)来做这件事。默认设置和设置似乎都不起作用--正如我在中看到的,当空闲计数超过4时,对象经常被销毁。
为什么会发生这种情况,我如何确保空闲对象不会如此频繁地被销毁?
发布于 2021-10-01 06:46:15
仅使用minEvictableIdleTimeMillis
是不够的
您还必须指定timeBetweenEvictionRunsMillis
,默认情况下为-1。
池对象正被验证/清理器线程逐出,因此timeBetweenEvictionRunsMillis
将使此线程运行,因此它将检查理想线程的minEvictableIdleTimeMillis
并将其逐出。
https://stackoverflow.com/questions/63466709
复制相似问题