Найкраща практика - не примушувати вивезення сміття в більшості випадків. (Кожна система, над якою я працював, примусово збирала сміття, підкреслювала проблеми, які, якщо їх вирішити, усували б необхідність примусового вивезення сміття та посилили систему.)
Є кілька випадків, коли ви знаєте більше про використання пам’яті, а потім збирач сміття. Це навряд чи може бути правдою для багатокористувацької програми або сервісу, який відповідає на більше ніж один запит.
Однак у деяких обробках типу партії ви знаєте більше, ніж GC. Наприклад, розгляньте програму, яка.
- Дається список імен файлів у командному рядку
- Обробляє один файл, а потім записує результат у файл результатів.
- Під час обробки файлу створюється безліч взаємопов'язаних об'єктів, які неможливо зібрати, поки обробка файлу не завершиться (наприклад, дерево розбору)
- Не зберігає великого стану між обробленими файлами .
Можливо, вам вдасться зробити випадок (після ретельного) тестування, що ви повинні примусити повноцінне вивезення сміття після обробки кожного файлу.
Інший випадок - це служба, яка прокидається кожні кілька хвилин, щоб обробити деякі предмети, і не тримає жодного стану, поки вона спить . Тоді примушувати повну колекцію безпосередньо перед сном, можливо, варто.
Єдиний раз, коли я б розглядав питання про форсування колекції, - це коли я знаю, що нещодавно було створено багато об’єктів, і на даний момент на них посилається дуже мало об’єктів.
Я б скоріше мав API збору сміття, коли я міг би давати йому підказки щодо такого типу речей без того, щоб змушувати GC себе.
Дивіться також " Підказки виступу Ріко Маріані "