程序 - 我
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,2garbage objectsProgram-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.start1 个对象被销毁之前,从输出中可以清楚地看到。那是什么物体?
(b) 为什么没有引用的对象B没有被销毁GC.start?
编辑
p GC.count
p GC.disable
p GC.count
输出
1
false
1
在我禁用的 abive 代码中。garbage collection为什么最后一个GC.count显示输出为1?
任何人都可以帮助我理解如上所述在我脑海中提出的问题。