혼란

2013-03-18 2 views
0

프로그램을 start` - I혼란

p RUBY_VERSION 

a = "A" 
b = "B" 

p "#{a}" 
p "#{b}" 

p "Garbage Count => #{GC.count}" 

b = "D" 

p "Garbage Count => #{GC.count}" 

GC.start 

p "Garbage Count => #{GC.count}" 

p "#{a}" 
p "#{b}" 

출력 : Program I에서

"1.9.3" 
"A" 
"B" 
"Garbage Count => 1" 
"Garbage Count => 1" 
"Garbage Count => 2" 
"A" 
"D" 

p "Garbage Count => #{GC.count}"의 출력이 나를 1,1,2을있는 혼동했다. 혼란은 garbage objects으로 계산되었습니다. 그래서 나는 아래와 같이 Program-I의 수정 된 버전을 시도했다.

여기서 나는 GC.start을 주석 처리했다. 이제 Program -II의 출력을 보면 인데, 내 첫 번째 프로그램에서 GC.start을 쳐다 보았습니다.이 첫 번째 프로그램에서 참조가없는 객체를 차례로 삭제했습니다. "B".

프로그램 - II

p RUBY_VERSION 

a = "A" 
b = "B" 

p "#{a}" 
p "#{b}" 

p "Garbage Count => #{GC.count}" 

b = "D" 

p "Garbage Count => #{GC.count}" 

#GC.start 

p "Garbage Count => #{GC.count}" 

p "#{a}" 
p "#{b}" 

출력 :

"1.9.3" 
"A" 
"B" 
"Garbage Count => 1" 
"Garbage Count => 1" 
"Garbage Count => 1" 
"A" 
"D" 

마지막 질문은 다음과 같습니다

(a) GC.start 전에 출력에서 ​​명확한 1 개의 객체가 삭제되었습니다. 어떤 물건 이었습니까?

(b) GC.start이없는 상태에서 참조 대상이 아닌 객체 B이 파괴되지 않은 이유는 무엇입니까?

abive 코드 내가 장애인 garbage collection 왜 라니는 지난 GC.count1로 출력을 보여주는 수행이의

p GC.count 
p GC.disable 
p GC.count 

출력

1 
false 
1 

EDIT?

누구나 위에서 언급 한 것처럼 내 마음에 떠오르는 질문을 이해할 수 있습니다.

답변

1

GC.count는 가비지 수집기가 실행 된 횟수를 반환하므로 GC.start을 호출하면 항상 1 씩 증가합니다.

코드가 실행되기 전에 많은 코드가 실행되기 때문에 일부 가비지 수집이 발생할 수 있습니다.

gc를 사용 중지하면 이미 발생한 가비지 수집을 실행 취소하지 않습니다.

+0

내 ** 수정 ** –