2013-08-26 4 views
0

실제로 혼란 스럽습니다. NodeJS에서 성공 응답 또는 출력 장치로 스트림을 보낸 후 변수가 GC의 후보가됩니까? 예를 들어,NodeJS에서 GC에 대해 변수 후보를 만드는 방법

var myObject = new myClass(), 
    xmlString = myObject.getXmlString(); 

res.write(xmlString); 
res.end(); 

이 아니라면이 개체를 GC하거나 myObject를 GC 후보로 만드는 방법은 무엇입니까?

답변

1

예 :

var someString = 'hi there'; 

someString = 'not hi there any more'; 

'안녕하세요'에 의해 점유 된 메모리 가비지 컬렉션 elligible이다, 즉 당신이 그것에 다른 뭔가를 할당 둘째, '안녕하세요 거기 더 이상'. 이제 '안녕하세요'를 다시 사용하지 않을 것이라는 것을 알고 있다고 가정 해 보겠습니다. 그러나 할당 할 다른 편리한 문자열이 없으면 '삭제'할 수 있습니다.

var someString = 'hi there'; 
delete someString; 

,이 경우 'someString'참조는하지만 반드시 바로 메모리를 해제하지 않는 개체를 삭제 무효화. 이것은 가비지 컬렉터가 someString 변수로 끝났음을 알 수있게 해줍니다. 여전히 범위 내에 있다는 사실에도 불구하고. 그것은 아마도 어떤 클로저 나 그와 비슷한 것에 대한 초기화로 사용 되었기 때문일 것입니다.

참고 : 'new'키워드를 사용해도 위의 로직은 변경되지 않습니다.

2

가비지 수집은 일반적으로 개체에 대한 참조 또는 부족한 항목에 따라 달라집니다. new myClass()으로 생성 된 개체는 myObject이 더 이상 참조하지 않는 경우 수집 될 수 있습니다.

function 내에 선언 된 경우 일반적으로 실행이 function의 끝에 도달하면 삭제됩니다.

function foo() { 
    var myObject = new myClass(); 
} // `myObject` doesn't exist beyond this 

당신이 함께 그 속도를 원한다면, 당신은 myObject에게이 다른 값 또는 delete 할당 할 수

myObject = null; 

delete myObject; 

더 많은 정보는 "What is JavaScript garbage collection?"

참조
관련 문제