Spring ThreadPoolTask​​Executor即使在调用shutdown之后也不会释放内存

时间:2019-06-22 09:56:32

标签: spring multithreading memory-management out-of-memory threadpoolexecutor

我在我的项目中将Springs ThreadPoolTask​​Executor用于线程池。

作为不同的单元测试的一部分,我启动了这些线程池,运行测试,然后关闭了线程池。但是,编写一堆测试用例会导致内存不足问题。尝试使用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提交任务时内存也会不断增加。

要释放内存还需要做什么?

`

0 个答案:

没有答案