Я использую Springs ThreadPoolTaskExecutor в своем проекте для потоковых пулов.
В рамках различных модульных тестов я запускаю эти Пулы потоков, запускаю тесты и затем отключаю Пулы потоков. Тем не менее, написание набора тестовых случаев вызывает проблемы нехватки памяти. Пробовал отлаживать его с помощью Memory Analyzer.
Похоже, что метод shutdown () не освобождает память и в результате инициализация в следующем тесте продолжает увеличивать объем памяти до тех пор, пока не будет исчерпано пространство.
Вопрос => Как эффективно освободить память, потребляемую потоками Пулов.
Обратите внимание, что shutdown () приводит к потере потоков.
Некоторые снимки кода
@BeforeEach
public void configure(){
customThreadPoolExecutor.setCorePoolSize(2);
customThreadPoolExecutor.setMaxPoolSize(2);
customThreadPoolExecutor.setAwaitTerminationSeconds(5);
customThreadPoolExecutor.setWaitForTasksToCompleteOnShutdown(false);
visibilityThreadPoolExecutor.setWaitForTasksToCompleteOnShutdown(false);
visibilityThreadPoolExecutor.setAwaitTerminationSeconds(5);
monitoringThreadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(false);
monitoringThreadPoolTaskExecutor.setAwaitTerminationSeconds(5);
}
@AfterEach
public void shutDownThreadPools() throws InterruptedException {
workerMessageMap.clear();
customThreadPoolExecutor.shutdown();
visibilityThreadPoolExecutor.destroy();
monitoringThreadPoolTaskExecutor.shutdown();
Thread.sleep(60000);
logger.info("After Shut down Thread Count is " + Thread.activeCount());
}
Внутри тестов я инициализирую эти пулы потоков и отправляю им задачи
customThreadPoolExecutor.initialize();
visibilityThreadPoolExecutor.initialize();
monitoringThreadPoolTaskExecutor.initialize();
//Code for submitting tasks
Я вижу, что память продолжает увеличиваться каждый раз, когда я отправляю задачи в threadPools, даже если потоки закрываются после вызова shutdown.
Что еще нужно сделать, чтобы освободить память?
`