Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设置关键帧的对象池未始终保持池中空闲对象的最小数量_Java_Apache Commons_Object Pooling_Apache Commons Pool - Fatal编程技术网

Java 设置关键帧的对象池未始终保持池中空闲对象的最小数量

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

我正在开发的一个应用程序使用来实现keyedobjectpool

我们有一个对象工厂,在其中我们实现了接口中指定的方法。实现如下所示:

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