2017-10-28 13 views
1

Constant에 할당 된 객체를 가비지 수집 할 수 없다는 것을 알고 있습니다. ("루비 상수 상수 개체에 대한 참조가있는 경우, 그 객체가 가비지 수집되지 않을 수 있습니다 수집 결코 쓰레기입니다."- https://www.sitepoint.com/ruby-uses-memory/)루비에서는 클래스 메소드의 변수에 할당 된 객체를 가비지 수집 할 수 있습니까?

그러나 나는 내 마음의 평화를 위해 선명도를 얻으려고 다른 것들은 결코 쓰레기 수거되지 않을 것입니다.

특히 클래스 메소드의 일반 변수에 할당 된 객체를 가비지 수집 할 수 있습니까? 예를 들면 : Foo.bar 후

class Foo 
    def self.bar 
    array = [] 
    1000.times { array << 'string' } 
    end 
end 

가 그 1000 문자열이 쓰레기 수집 할 수있다,라고, 또는 그들이이 '배열'변수에 저장되어 있기 때문에 놀아해야합니까입니까?

배열이 @array 또는 @@array 인 경우 어떻게됩니까?

+1

변수'array'가 보유하고있는 객체는 메소드의 범위를 벗어나서 참조되지 않으므로 메소드가 완료되면 가비지 수집됩니다. –

답변

1

GC는 다른 개체가 더 이상 참조하지 않는 슬롯/개체를 확인하여 해제합니다. 따라서 특별한 경우에 array은 어디에서든지 참조되지 않으므로 가비지 수집됩니다. Here's an article explaining how GC works.

클래스 인스턴스 변수 @instance 및 클래스 변수 @@instance은 클래스 자체가 정의되지 않을 때까지 가비지 수집을 방지하는 클래스 vars에 대한 참조를 보유합니다.