在ruby中,可以将分配给类方法中的变量的对象进行垃圾回收吗?

时间:2017-10-28 10:11:46

标签: ruby garbage-collection class-method

我知道分配给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

会是什么情况

1 个答案:

答案 0 :(得分:1)

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

类实例变量@instance和类变量@@instance包含对其类变量的引用,这会阻止它们的垃圾收集,直到类本身未定义为止。