2013-11-23 2 views
3
  1. 상수에 할당 된 Class 개체는 언제 가비지 수집됩니까? 예 : 상수는 언제 Ruby에서 가비지 수집됩니까?

    class Foo; end 
    Bar = Class.new {} 
    
  2. 언제 상수 쓰레기 수집하세요 익명 클래스/모듈 내에서 선언입니까? 예 : 위의 예에서
    foo = Class.new do 
        self::NAME = "Bar" 
    end 
    foo::NAME # Bar 
    foo = nil 
    GC.start 
    

    는 일정 NAME 쓰레기 수집 일 익명의 클래스 내에서 선언 할 것인가? (I 익명 클래스 쓰레기 수집됩니다 없다고 가정하고 ..)

+0

"언제", "언제 할 수 있는지"정말로 알고 싶습니까? 첫 번째 응답은 다른 많은 변수에 따라 다르며 두 번째 변수는 그렇지 않습니다. –

+0

@AndrewMarshall 시나리오 1에서 가비지 수집 여부를 알고 싶습니다. 시나리오 2에서는 가비지 수집 요청이 제출 될 때'NAME' 상수가 가비지 수집되는지 여부를 알고 싶습니다. –

답변

3

그것은 매우 일반적인 경우에이 졸이다 쉽게 : 객체가 더 이상에 대한 참조가있는 경우, 그것은 쓰레기 수집 할 수 있습니다. 내가 객체이 아니라 변수이 아니라는 것을 유의하십시오. 변수는 가비지 수집되지 않으며 개체는 있습니다. 이제


의이 주어진 예제를 살펴 보자 Class

class Foo; end 
Bar = Class.new {} 

인스턴스는 가비지 수집됩니다 그들은 다른 값으로 재 할당됩니다 (있는 경우)에 할당하고있는 일정한 경우 (예 : Bar = nil)이 클래스의 인스턴스가 없으며이를 상속하는 클래스가 없습니다. 그들에 대한 다른 참조 (즉,이 코드는 전체 코드)이 없다면 이전 foo & foo::NAME

foo = Class.new do 
    self::NAME = "Bar" 
end 
foo::NAME # Bar 
foo = nil 

숫자가 가비지 수집 될 수있다.

관련 문제