我知道分配给Constant的对象不能被垃圾回收。 (" Ruby中的常量永远不会被垃圾收集,所以如果一个常量引用了一个对象,那么该对象永远不会被垃圾收集。" - https://www.sitepoint.com/ruby-uses-memory/)
但是我试图清楚地表达我对其他事物永远不会被垃圾收集的安心。
特别是,可以将分配给类方法中的普通变量的对象进行垃圾回收吗?例如:
class Foo
def self.bar
array = []
1000.times { array << 'string' }
end
end
在调用Foo.bar之后,这些1000个字符串是否可以被垃圾收集,或者它们是否需要闲逛,因为它们存储在&#39;数组中。变量?
如果数组是@array
或@@array
?
答案 0 :(得分:1)
GC检查哪些插槽/对象不再被其他对象引用并释放它们。因此,在您的特定情况下,array
不会被引用到任何地方,因此它将被垃圾收集。 Here's an article explaining how GC works
类实例变量@instance
和类变量@@instance
包含对其类变量的引用,这会阻止它们的垃圾收集,直到类本身未定义为止。