2013-03-18 64 views
0

計劃 - 我混亂與Ruby的`GC#start`

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 Ip "Garbage Count => #{GC.count}"輸出讓我困惑這是1,1,2。與garbage objects計數混淆。所以我嘗試瞭如下的修改版本Program-I

在哪裏我註釋掉GC.start。現在在看的Program -II輸出似乎 正如我在我的第一個程序,這反過來又破壞了無參照物 "B" strated GC.start

計劃 - 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)在從輸出中清楚的1個對象之前。它是什麼對象?

(b)爲什麼沒有引用對象B沒有被銷燬沒有GC.start

EDIT

p GC.count 
p GC.disable 
p GC.count 

輸出

1 
false 
1 
在abive代碼我已禁用 garbage collection。爲什麼呢最後 GC.count是示出輸出作爲 1

誰能幫助我瞭解在我的腦海中提出的問題如上所述。

回答

1

GC.count不返回垃圾收集對象的數量 - 它返回垃圾收集器運行的次數,因此調用GC.start將始終遞增1。

一串代碼之前,你的代碼開始運行得到執行,所以它不是令人驚訝的是,可能會出現一些垃圾收集。

禁用GC不會撤消已經發生了垃圾收集。

+0

見我**編輯** – 2013-03-18 13:38:40