Подтвердить что ты не робот

Сбор рубинового мусора

Когда вы будете использовать этот метод сбора мусора в своих программах Ruby?

GC.start
4b9b3361

Ответ 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 перед тестовыми примерами, иначе они станут непредсказуемыми и даже могут создавать ложные срабатывания.