与Ruby的混淆';s`GC#start`
程序-I 输出: 在与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
中,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