2013-09-06 2 views
0

도움을 미리 감사드립니다. 순환 참조가있는 경우 Node.js console.log (util.inspect (ctx))는 [Circular] 등을 덤프합니다.Nodejs의 순환 참조

스택 오버 플로우 또는 메모리 문제가 발생할 경우 회람 참조를 완전히 피해야합니까?

순환 참조를 포함하는 루프가 있지만 루프를 종료하기 전에 개체를 null로 설정하면 가비지 수집기가 저장소를 정리하지 않아야하며 메모리가 부족하거나 스택되지 않아야합니다 오버플로 문제 afterall?

function run() { 
    var obj = {}, ctx = vm.createContext({}); 

    obj.__ctx = ctx; 
    ctx.__obj = obj; 
    //console.log("before:"+util.inspect(obj)); 
    //console.log("before:"+util.inspect(ctx)); 
    vm.Script.runInContext('var x = +1;', ctx); 
    console.log(util.inspect(ctx)); 
    console.log(util.inspect(obj)); 
    ctx = null; 
    obj = null; 


    } 

    for (var i = 0; i < 10000; i += 1) { 

    run(); 
    //sys.log(sys.inspect(process.memoryUsage())); 

    } 

답변

0

아니요. 기능 범위를 벗어난 개체에 대한 참조를 보유하고 있지 않으면 메모리에 문제가 없습니다. 쓰여진 방식대로, 두 오브젝트는 모두 null로 설정되는 즉시 가비지 콜렉션에 적합합니다.

CONSOLE.LOG() 객체가 무한 루프 초래 아웃 그래프 쓰려고 때문에 대신 단순히 [Circular]

답장 때문 원형 에러를 제공 방법