Насколько тщательен GC.start в MRI Ruby 2.0?

В MRI Ruby 2.0, насколько тщательно GC.start?

Пытается ли он собрать мусором все объекты, на которые больше нет ссылок? Или он только GC возражает, если считает это необходимым?

Я пытаюсь отслеживать количество объектов определенного класса, которые у меня есть, и, кажется, оно продолжает увеличиваться, хотя я думаю, что некоторые объекты больше не имеют на них ссылки. Использование GC.start не исправляет это. Я не использую никаких расширений C, так что это не может меня усложнить.

Редактировать: Проблема, с которой я столкнулся, была такой же, как и в Ruby Symbol#to_proc пропускает ссылки в 1.9.2-p180? - объекты все еще существовали, когда я думал, что они должны быть удалены сборщиком мусора, и, как и в этом случае, проблема заключалась в том, чтобы сделать с использованием неявного Symbol -> Proc. Тем не менее, было бы неплохо знать, ожидается ли, что GC.start будет собирать все объекты или просто собирать то, что MRI считает необходимым для сборки мусора.


person Andrew Grimm    schedule 18.10.2013    source источник
comment
Неясно, используете ли вы GC.start и это не дает ожидаемого эффекта, или вы просто видите, что объекты удерживаются дольше, чем ожидалось, и задаетесь вопросом, поможет ли GC.start.   -  person Andrew Marshall    schedule 18.10.2013
comment
@AndrewMarshall Спасибо за это! Отредактировано.   -  person Andrew Grimm    schedule 18.10.2013
comment
Это старый добрый Ruby-скрипт или Pry/IRB? Вы смотрите на ObjectSpace или потребление памяти процессом?   -  person Andrew Marshall    schedule 18.10.2013
comment
Обычный старый. Кстати, я думаю, что у меня есть более конкретный вопрос о GC.   -  person Andrew Grimm    schedule 18.10.2013
comment
У меня возникла та же проблема, что и stackoverflow.com/questions/7263268/ . По сути, я думал, что объекты не получают GC, когда они должны быть, но это было потому, что я использовал Symbol#to_proc так же, как и в этом вопросе.   -  person Andrew Grimm    schedule 18.10.2013