2013-03-18 41 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