我正在尝试使用Apache公共池库来为在我的应用程序中创建昂贵的对象实现对象池。对于respource池,我使用库的GenericObjectPool类来使用API为对象池提供的默认实现。为了确保我们不会在内存中有多个空闲对象,我将minEvictableIdleTimeMillis和timeBetweenEvictionRunsMillis属性设置为30分钟。
正如我从其他问题,博客和API文档中了解到的,这些属性会触发一个单独的线程,以便从池中驱逐空闲对象。
如果对应用程序性能有任何负面影响,并且有任何方法可以测试该线程是否实际执行,有人可以帮助我吗?
答案 0 :(得分:0)
Eviction运行与客户端线程竞争访问池中的对象,因此如果它们运行得太频繁,可能会导致性能问题。
但是,我们有一个高TPS系统,每1秒就会进行一次驱逐,而且我们看不到很多性能瓶颈。
关于驱逐线程运行,您可以在GenericObjectPool的实现中覆盖evict()方法并添加日志行。
@Override
public void evict() throws Exception {
//log
super.evict();
}