2017-10-28 8 views
1

Constantに割り当てられたオブジェクトはガベージコレクションできないことがわかります。 ( "Rubyの定数はガベージコレクションされないので、定数がオブジェクトへの参照を持つ場合、そのオブジェクトはガベージコレクションされません" - https://www.sitepoint.com/ruby-uses-memory/ruby​​では、クラスメソッドの変数に割り当てられたオブジェクトをガベージコレクションすることができますか?

しかし、私は心の平和のために明快さを得ようとしています他のものが一般的にガベージコレクションされることはありません。

特に、クラスメソッドのプレーン変数に割り当てられたオブジェクトはガベージコレクションできますか?たとえば:

class Foo 
    def self.bar 
    array = [] 
    1000.times { array << 'string' } 
    end 
end 

Foo.barが呼び出された後、それらの千の文字列はガベージコレクトすることができ、またはそれらは「配列」変数に対して保存されているので、彼らがたむろしなければなりませんか?

配列が@arrayまたは@@arrayの場合はどうなりますか?

+1

変数 '配列 'が保持するオブジェクトはメソッドの範囲外で参照されないので、メソッドが完了するとガベージコレクションされます。 –

答えて

1

GCは、他のオブジェクトから参照されていないスロット/オブジェクトを確認し、解放します。したがって、特定のケースでは、arrayは参照されていないため、ガベージコレクションされます。 Here's an article explaining how GC works

クラスインスタンス変数@instanceとクラス変数@@instanceは、クラス自体が未定義になるまでガベージコレクションを防止するクラスvarsへの参照を保持します。

関連する問題