在ruby中,分配给类方法中变量的对象是否可以被垃圾回收?
问题描述:
我知道分配给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
,会出现什么情况?
答
GC检查哪些插槽/对象不再被其他对象引用并释放它们。因此,在您的特定情况下,array
未被引用,因此它将被垃圾收集。 Here's an article explaining how GC works。
一个类实例变量@instance
和一个类变量@@instance
持有对其类vars的引用,它阻止了它们的垃圾收集,直到类本身未定义。
变量'array'拥有的对象没有被引用超出该方法的范围,所以是的,一旦该方法完成,它将被垃圾收集。 –