Когда вы будете использовать этот метод сбора мусора в своих программах Ruby?
GC.start
Ответ 1
Бывают случаи, когда необходимо отбросить его, но обычно он отлично работает сам по себе. У меня были ситуации, когда приложение будет пережевывать 1 ГБ памяти, если оставить его непроверенным, вдаваясь глубоко в swap, где запуск GC.start прерывисто сократит это до 100 МБ.
Проблема заключается в том, что вызов этого метода очень дорог и может значительно замедлить ваше приложение, если он используется агрессивно.
Ответ 2
Когда Benchmarking
Я сравниваю некоторый код, который создает много объектов, и я заметил, что мои тесты сильно различаются. Я определил, что шипы были от сборки мусора, работающей во время моего теста.
Управление процессом вручную дает мне более согласованные эталоны.
def without_gc
GC.start # start out clean
GC.disable
yield
GC.enable
end
without_gc do
Benchmark.measure { some_code }
end
Тем не менее, GC.start приведет к значительным замедлениям, если вы запустите его повторно.
Ответ 3
Я использую его при итерации через большое количество элементов в средах с ограниченной памятью (Heroku) - я заставляю GC.start каждые 100 элементов или около того.
Ответ 4
Обычно обескуражен, если у вас нет особых потребностей. Ex. иногда при анализе памяти полезно использовать gc для лучшей предсказуемости.
Ответ 5
Пример реальной жизни:
Когда тестирование стримера JSON Я хочу убедиться, что потребление памяти остается низким. Поэтому мне нужно запустить GC.start перед тестовыми примерами, иначе они станут непредсказуемыми и даже могут создавать ложные срабатывания.