Как выполнить сборку мусора при использовании ScheduledExecutorService для бесконечной задачи?

У меня есть программа, которую нужно запускать примерно через равные промежутки времени, навсегда. Я нашел ScheduledExecutorService и заметил его метод scheduleAtFixedRate(). Здесь есть простое руководство.

Мой вопрос: если моя программа продолжает работать так, как должна (примерно каждые 60 секунд до конца времени), нужно ли что-то делать для обработки сборки мусора, если я использую вышеуказанный метод? Нужно ли закрывать темы и т. д.? Должен ли я запускать System.gc? Я все еще привыкаю к ​​Runnables.

На данный момент я использую цикл while и thread.sleep(60000) для выполнения моей задачи каждые 60 секунд. Однако при этом сборка мусора не выполняется, и после нескольких дней работы моя программа использует более 70% памяти сервера.

Спасибо за любую помощь, которую вы можете дать. Я ценю ваше время, помогая мне с моей проблемой новичка. По сути, это второй год моего путешествия по Java!


person TheFunk    schedule 29.02.2016    source источник
comment
Сборка мусора выполняется автоматически. Если ваш процесс со временем потребляет все больше и больше памяти, то у вас есть утечка ресурсов.   -  person Ralf    schedule 29.02.2016
comment
Сборщик мусора Java использует алгоритм пометки и очистки для освобождения памяти (это означает, что при запуске он должен остановить выполнение для сбора мусора). JVM регулярно вызывает сборщик мусора во время выполнения, но не указывает, когда и как он будет вызывать его. Это также означает, что в многопоточных программах сборщик мусора может не очень хорошо очищать память, поскольку объекты в куче могут считаться все еще используемыми. Это может помочь.   -  person callyalater    schedule 29.02.2016
comment
Прочитайте этот вопрос, чтобы получить хорошее объяснение Java GC в многопоточном контексте.   -  person callyalater    schedule 29.02.2016
comment
@callyalater, это действительно очень помогает! Часть моей программы является многопоточной, поскольку этот конкретный класс одновременно взаимодействует с целой кучей удаленных устройств. Я использую Future для получения результатов с каждого из удаленных устройств. Я собираюсь предположить, что это, возможно, является причиной моих бед.   -  person TheFunk    schedule 29.02.2016


Ответы (1)


Никаких действий не требуется. GC будет автоматически запускаться при необходимости.

person Andreas    schedule 29.02.2016