Почему ScheduledExecutorService вызывает утечку памяти с помощью «нового» ключевого слова - PullRequest
0 голосов
/ 13 ноября 2018

Когда я пытаюсь использовать ScheduledExecutorService для выполнения следующего кода:

ScheduledExecutorService scheduledExecutor = Executors.newScheduledThreadPool(1);
scheduledExecutor.scheduleAtFixedRate(new TaskA(), 0, 1800, TimeUnit.SECONDS);

Это приводит к утечке памяти (использование памяти продолжает расти, так что в течение 12 часов я использую 90% + память намоя машина (что в итоге приводит к сбою Eclipse из-за нехватки памяти), хотя программа использует только около 50% памяти после 1-2 запусков)

Однако, когда я изменяю его на:

ScheduledExecutorService scheduledExecutor = Executors.newScheduledThreadPool(1);

final TaskA taskA = new TaskA();
scheduledExecutor.scheduleAtFixedRate(taskA, 0, 1800, TimeUnit.SECONDS);

Кажется, что освобождает память просто отлично.

Почему первый код вызывает утечку памяти, а второй - нет?Разве не весь мусор памяти собирается после завершения выполнения потока?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...