#java #object-pooling #apache-commons-pool
#java #объединение объектов #apache-commons-pool
Вопрос:
У меня есть этот пул объектов (с использованием org.apache.commons.pool2), из которого я заимствую (или создаю) один.
Максимальный размер простоя, который я установил, равен 3 (при максимальном размере 5). Это было установлено с пониманием того, что если незанятых объектов больше 3, они будут уничтожены (BasePooledObjectFactory#destroyObject)
Что это делает в моей системе, так это то, что создает и уничтожает несколько объектов, что является дорогостоящим. Я бы хотел, чтобы он уничтожался только при бездействии в течение более длительного периода (скажем, 1 минуты).
Я попытался установить setMinEvictableIdleTimeMillis (по умолчанию, как я мог видеть, 30 минут), чтобы сделать это. Значение по умолчанию, а также настройка, похоже, не работают — например, я вижу, что объект уничтожается довольно часто, когда количество простоев превышает 4.
Почему это может происходить и как я могу убедиться, что незанятые объекты не уничтожаются так часто?
Комментарии:
1. Не проверено, поэтому просто в качестве комментария: Я думаю, что вы хотите, чтобы minIdle = 3, maxIdle = maxTotal = 5. => Сохраняйте как минимум 3 незанятых объекта на неопределенный срок, до 5, если они простаивают менее minEvictableIdleTime.
Ответ №1:
недостаточно использовать minEvictableIdleTimeMillis
только
вы также должны указать, timeBetweenEvictionRunsMillis
который равен -1 по умолчанию.
объекты пула удаляются потоком проверки / очистки, поэтому timeBetweenEvictionRunsMillis
этот поток будет запущен, поэтому он проверит minEvictableIdleTimeMillis
идеальные потоки и удалит их.