Когда я пытаюсь использовать 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);
Кажется, что освобождает память просто отлично.
Почему первый код вызывает утечку памяти, а второй - нет?Разве не весь мусор памяти собирается после завершения выполнения потока?