程序 - 我
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
?
任何人都可以帮助我理解如上所述在我脑海中提出的问题。