我在我的项目中将Springs ThreadPoolTaskExecutor用于线程池。
作为不同的单元测试的一部分,我启动了这些线程池,运行测试,然后关闭了线程池。但是,编写一堆测试用例会导致内存不足问题。尝试使用Memory Analyzer对其进行调试。
似乎shutdown()方法不会释放内存,因此在下一个测试用例中的初始化会继续增加内存,直到空间用完为止。
Question =>如何有效释放线程池消耗的内存。
请注意,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
我看到即使我在调用shutdown之后关闭了线程,每次向threadPools提交任务时内存也会不断增加。
要释放内存还需要做什么?
`