2017-10-28 109 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的引用,它阻止了它們的垃圾收集,直到類本身未定義。