与Ruby的混淆';s`GC#start`

与Ruby的混淆';s`GC#start`,ruby,ruby-1.9.3,Ruby,Ruby 1.9.3,程序-I 输出: 在程序I中,p“Garbage Count=>{GC.Count}”的输出使我混淆了1,1,2。混淆的是垃圾对象计数。因此,我尝试了Program-I的修改版本,如下所示 在这里我注释掉了GC.start。现在看一下Program-II的输出 正如我在我的第一个程序中执行的GC.start,这反过来又破坏了无引用对象 “B” 计划-II 输出: 最后的问题是: (a) 在GC.start1之前,已从输出中清除对象。那是什么东西 (b) 为什么没有一个引用对象b在没有GC.sta

程序-I

输出:

程序I
中,
p“Garbage Count=>{GC.Count}”
的输出使我混淆了
1,1,2
。混淆的是
垃圾对象
计数。因此,我尝试了
Program-I
的修改版本,如下所示

在这里我注释掉了
GC.start
。现在看一下
Program-II的输出
正如我在我的第一个程序中执行的
GC.start
,这反过来又破坏了无引用对象
“B”

计划-II

输出:

最后的问题是:

(a) 在
GC.start
1之前,已从输出中清除对象。那是什么东西

(b) 为什么没有一个引用对象
b
在没有
GC.start
的情况下没有被销毁

编辑

输出

在abive代码中,我禁用了
垃圾收集
。为什么最后一个
GC.count
将输出显示为
1


有人能帮我理解上面提到的问题吗。

GC.count不返回垃圾回收对象的数量-它返回垃圾回收器已运行的次数,因此调用
GC.start
总是将其递增一次

在您的代码开始运行之前会执行一堆代码,因此可能会发生一些垃圾收集也就不足为奇了

禁用gc不会撤消已经发生的垃圾收集

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"
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"
p GC.count
p GC.disable
p GC.count
1
false
1