プログラム - I
p RUBY_VERSION
a = "A"
b = "B"
p "#{a}"
p "#{b}"
p "Garbage Count => #{GC.count}"
b = "D"
p "Garbage Count => #{GC.count}"
GC.start
p "Garbage Count => #{GC.count}"
p "#{a}"
p "#{b}"
出力:
"1.9.3"
"A"
"B"
"Garbage Count => 1"
"Garbage Count => 1"
"Garbage Count => 2"
"A"
"D"
のProgram I
出力で、p "Garbage Count => #{GC.count}"
どちらが混乱したか.混乱1,1,2
はgarbage objects
カウントにありました。Program-I
そこで、以下の修正版を試してみました。
コメントアウトしたところGC.start
。その出力を見ると、最初のプログラムで宣言しProgram -II
たように見えます。GC.start
これにより、参照なしオブジェクトが破壊されました
"B"
。
プログラム - II
p RUBY_VERSION
a = "A"
b = "B"
p "#{a}"
p "#{b}"
p "Garbage Count => #{GC.count}"
b = "D"
p "Garbage Count => #{GC.count}"
#GC.start
p "Garbage Count => #{GC.count}"
p "#{a}"
p "#{b}"
出力:
"1.9.3"
"A"
"B"
"Garbage Count => 1"
"Garbage Count => 1"
"Garbage Count => 1"
"A"
"D"
最終的な質問は次のとおりです。
(a)GC.start
出力から明らかなように、1 つのオブジェクトが破棄される前。それは何の物体でしたか?
(b) 非参照オブジェクトB
がなくても破棄されなかったのはなぜGC.start
ですか?
編集
p GC.count
p GC.disable
p GC.count
出力
1
false
1
abive コードで無効にgarbage collection
しました。最後GC.count
の出力が として表示されるのは1
なぜですか?
上記のように頭に浮かんだ質問を理解するのを手伝ってくれる人はいますか。