Лучше всего в большинстве случаев не принудительно выполнять сборку мусора. (Каждая система, над которой я работал, которая имела принудительную сборку мусора, имела проблемы подчеркивания, которые, если бы они были решены, устранили бы необходимость принудительной сборки мусора и значительно ускорили работу системы.)
Есть несколько случаев, когда вы знаете больше об использовании памяти, чем сборщик мусора. Это маловероятно для многопользовательского приложения или службы, которая одновременно отвечает более чем на один запрос.
Однако в некоторой пакетной обработке вы знаете больше, чем GC. Например, рассмотрим приложение, которое.
- Предоставляется список имен файлов в командной строке
- Обрабатывает отдельный файл, а затем записывает результат в файл результатов.
- При обработке файла создает множество взаимосвязанных объектов, которые не могут быть собраны до завершения обработки файла (например, дерево синтаксического анализа)
- Не сохраняет много состояний между обработанными файлами .
Вы можете быть в состоянии сделать случай (после тщательного) тестирования , что вы должны заставить полный сбор мусора после того как вы обрабатывать каждый файл.
Другой случай - это служба, которая просыпается каждые несколько минут для обработки некоторых элементов и не сохраняет никакого состояния во время сна . Тогда может оказаться полезным принудительное выполнение полного сбора перед сном .
Единственный раз, когда я мог бы рассмотреть возможность принудительной коллекции, - это когда я знаю, что много объектов было создано недавно, и очень мало объектов в настоящее время упоминается.
Я бы предпочел иметь API для сборки мусора, когда я мог бы давать ему подсказки об этом типе вещей, не заставляя себя выполнять сборку мусора.
См. Также « Лакомые кусочки выступления Рико Мариани »