Я думаю, что вы неправильно понимаете утечки памяти или, по крайней мере, как это относится к Ruby (или, точнее, как не применяется).
Rubyиспользует сборщик мусора, который обрабатывает освобождение памяти, когда объект выходит из области видимости (т. е. больше не существует существующей ссылки на него).Если вы не выделяете память самостоятельно, как то, что делаете в C, вам не нужно заботиться о ее освобождении.
В Ruby, если вы не используете C API, не используете Fiddle / FFI для вызова внешнего кода (в некоторых случаях) или, возможно, в некоторых других крайних случаях, вам не нужно беспокоиться об освобождении памяти.Простое высвобождение объекта из области видимости выполнит ту же задачу внутренне.
Если предположить, что вы, возможно, только что использовали неточный термин, и на самом деле означает «хранить все больше и больше бесполезных объектов, которые больше не будут использоваться», то это вопрос реализации, который ваш пример не проясняет.
Если, возможно, вы имеете в виду, например ...
hash[x][y] = z
... и затем позже вы выполняете то же действие, задаваясь вопросом, накапливается ли старое значение z
,тогда «нет», это не так (при условии, что x
и y
одинаковы).Как упомянуто выше, сохранение нового значения в том же месте приводит к тому, что старый объект, который был там, выходит из области видимости, и Ruby освобождает свою память внутренне, пока на него больше не ссылаются.