我知道分配给常量的对象不能被垃圾回收。(“Ruby中的常量永远不会被垃圾回收,所以如果一个常量引用了一个对象,那么这个对象就永远不会被垃圾回收。”- https://www.sitepoint.com/ruby-uses-memory/)
但我试图让我的内心平静下来,一般情况下,哪些其他东西永远不会被垃圾收集。
特别是,在类方法中分配给普通变量的对象可以被垃圾回收吗?例如:
class Foo
def self.bar
array = []
1000.times { array << 'string' }
end
end在调用Foo.bar之后,这1000个字符串是否可以被垃圾回收,或者它们是否必须挂起,因为它们是根据“数组”变量存储的?
如果数组为@array或@@array,会出现什么情况
发布于 2017-10-28 22:47:47
GC检查哪些槽/对象不再被其他对象引用,并释放它们。因此,在您的特定情况下,array没有在任何地方被引用,因此它将被垃圾收集。Here's an article explaining how GC works。
类实例变量@instance和类变量@@instance保存对其类变量的引用,这会阻止它们的垃圾收集,直到类本身未定义为止。
https://stackoverflow.com/questions/46988545
复制相似问题