Spring ThreadPoolTaskExecutor не освобождает память даже после завершения вызова - PullRequest
1 голос
/ 22 июня 2019

Я использую 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.

Что еще нужно сделать, чтобы освободить память?

`

...