2017-10-28 106 views
1

我知道分配给Constant的对象不能被垃圾回收。 (“Ruby中的常量永远不会被垃圾收集,所以如果一个常量有一个对象的引用,那么这个对象就永远不会被垃圾收集。” - https://www.sitepoint.com/ruby-uses-memory/在ruby中,分配给类方法中变量的对象是否可以被垃圾回收?

但是我试图弄清楚我的安心一般情况下其他事情永远不会被垃圾收集。

特别是,分配给类方法中的普通变量的对象是否可以被垃圾回收?例如:

class Foo 
    def self.bar 
    array = [] 
    1000.times { array << 'string' } 
    end 
end 

Foo.bar之后被调用时,可以将这些串1000被垃圾收集,或做他们流连,因为它们存储针对“数组”变量?

如果数组是@array@@array,会出现什么情况?

+1

变量'array'拥有的对象没有被引用超出该方法的范围,所以是的,一旦该方法完成,它将被垃圾收集。 –

回答

1

GC检查哪些插槽/对象不再被其他对象引用并释放它们。因此,在您的特定情况下,array未被引用,因此它将被垃圾收集。 Here's an article explaining how GC works

一个类实例变量@instance和一个类变量@@instance持有对其类vars的引用,它阻止了它们的垃圾收集,直到类本身未定义。