Java 设置关键帧的对象池未始终保持池中空闲对象的最小数量
我正在开发的一个应用程序使用来实现keyedobjectpool 我们有一个对象工厂,在其中我们实现了接口中指定的方法。实现如下所示:Java 设置关键帧的对象池未始终保持池中空闲对象的最小数量,java,apache-commons,object-pooling,apache-commons-pool,Java,Apache Commons,Object Pooling,Apache Commons Pool,我正在开发的一个应用程序使用来实现keyedobjectpool 我们有一个对象工厂,在其中我们实现了接口中指定的方法。实现如下所示: class MyKeyedPooledObjectFactory implements KeyedPooledObjectFactory<myKey, myObject> { makeObject(key) { //things that make myObject and //return Defa
class MyKeyedPooledObjectFactory implements KeyedPooledObjectFactory<myKey, myObject> {
makeObject(key) {
//things that make myObject and
//return DefaultPooledObject<>(myObject)
}
activateObject(key, pooledObject) {
log.info("Activating object for {}", key)
}
passivateObject(key, pooledObject) {
log.info("Passivating object for {}", key)
pooledObject.getObject().someMethodToResetObject()
}
destroyObject(key, pooledObject) {
log.info("Destroying object for {}", key)
}
validateObject(key, pooledObject) { // never gets called in code
return true;
}
}
直到最近,它们还被用来构造键控对象池。现在,我已更改为使用修改后的配置,如下所示:
TimeBetweenEvictionRunsMillis=300000将其设置为5分钟,并启用空闲对象逐出线程
MinIdlePerKey=1我需要在池中始终为每个密钥保留至少1个对象,以满足延迟要求
MinEvictableIdleTimeMillis=300000,即对象可以在池中保持空闲5分钟,然后它就有资格被逐出
其他配置保持不变,即默认值
现在,当我运行应用程序时,我看到逐出线程正在运行,在对象保持空闲的10分钟内,destroyObject方法正在按预期调用。但是,我还注意到,池并没有为每个键维护至少1个空闲对象
我的理解是,有一种机制可以确保设定一个目标。但这似乎没有发生,我也无法找出原因
任何关于为什么会发生这种情况的帮助或见解都将非常有用
我看到的唯一警告是,我在使用api-2.0中的方法时,参考了api-1.6文档。我使用了poolConfig.setMinIdlePerKeymyMinIdlePerKeyValue,它应该与1.6版本中的poolConfig.setMinIdle等效。minEvictableIdleTimeMillis不支持minIdle,您需要的是softMinEvictableIdleTimeMillis。请参阅以下文档: 但是,请注意,如果设置了minevictableidletimills,则会忽略softminevictableidletimills