2016-09-03 7 views
0

이 코드가 있습니다. 기본적으로 몽고 데이터베이스에 연결하여 문서를 검색합니다. 매 반복마다 객체의 메시지 배열을 검색합니다. 메시지의 변수를 생성 한 다음이를 통해 반복합니다. 콜백 함수 내에서 선언 된 변수 (var msg)가 메모리에 남아 있습니까? 아니면 콜백 함수 실행이 끝날 때 파괴됩니까?var msg이 실제로 let msg으로 선언 된 경우 어떤 차이가 있습니까? 메모리에서 전체 범위를 삭제할 수있는 방법이 있습니까?콜백 함수 내에서 선언 된 Do 변수는 메모리에 남아 있거나 콜백 실행 종료시 파괴됩니까?

MongoClient.connect(mongoUrl, (err, db) => { 
    assert.equal(null,err); 
    var collection_data = db.collection('threadContents').find(); 
    collection_data.on('data', (doc) => { 
    var msg = doc.messages; 
    for (var variable in msg) { 
     console.log(msg); 
    }//forin(msg) 
    });//collection_data.on 
});//mongo.connect 
+0

'콜백 함수 실행이 끝나면 파기됩니까? '- 종종 코드에 따라 달라집니다. –

+0

@ JaromandaX 샘플 코드 스 니펫을 제공했습니다. 그렇지 않으면 콜백 함수 실행이 끝날 때 변수를 강제로 삭제하는 것이 좋습니다. – Kunok

+0

오, 특정 코드에 대해 묻고 있습니까? 어떤 변수와 관련이 있습니까? –

답변

1

이론적으로 - 그렇습니다. 실제로
- 그것은 그 간단하지 ... 당신의 예에서

, var msg하지 않는 그것의 "누출"외부 콜백은이 작업의 완료되면이 대부분 파괴 얻을 것이다, 그래서 원래의 범위입니다.
JS 엔진은 대부분 Garbage Collected이므로이 메모리 조각은 얼마 동안은 스택에 남아있을 수 있지만 더 이상 도달 할 수는 없습니다.

이 변수를 외부 범위로 선언하면 해당 범위가 메모리에 남아 있으면 메모리에 남아있을 수 있습니다. 따라서 다른 코드가 해당 변수에 액세스 할 수 있습니다. 이 문제는 MDN의 Closures 섹션에서 읽을 수 있습니다.

주목할만한 또 다른 사항은 console.log입니다. 일반적으로 비 프리미티브 값 (실제로 "특수"객체 인 객체 또는 배열과 같은)은 값이 아닌 참조로 액세스 할 수 있습니다. 따라서 var msg이 프리미티브가 아닌 경우 콘솔을 지울 때까지 메모리에 지속될 가능성이 큽니다. 원시 값은 복사되므로 엄밀히 말하면 메모리에 계속 남아 있지만 메모리의 다른 위치에 남아 있습니다 (JIT 엔진이이를 최적화하려고 시도 할 수도 있고 필요하지 않은 경우 메모리를 복사하지 않을 수도 있음).

+0

"콘솔을 지우시겠습니까?"라고 말하면 정확히 무엇을 의미합니까?" – Kunok

+0

콘솔의"지우기 "버튼을 클릭하십시오 :) – mdziekon

+0

실제로 터미널에서 노드 스크립트를 실행하고 해당 옵션이 없으며 가능한 한 최소한 사용하려고하기 때문에 의존하고 싶은 것이 아닙니다. RAM을 스크립트에 사용하면 강력한 하드웨어가 아닌 많은 작업이 필요하고 CRON 작업으로이 스크립트를 실행합니다. – Kunok

1

Node.js (및 모든 자바 스크립트 엔진)는 tracing garbage collection에 의존합니다. 즉, 할당 된 메모리가 비 결정적 방식으로 할당 취소된다는 것을 의미합니다. 즉, 발생 시점을 정확히 예측할 수 없습니다. 이것은 대개는 영향을 미치지 않지만 예측 가능한 방식으로 일부 메모리 또는 일부 리소스를 할당 해제하려는 경우 일부 임시 기술을 사용해야합니다.

0

특정 예에서 'msg'는 삭제되지만 곧바로 삭제되지는 않습니다.

+0

나중에 JavaScript를 삭제할 이벤트 – Kunok

+0

내가 말한 것은 그것이 언제 일어날 지 말할 수 없다는 것이었다. – snit80

+0

어떤 문서가 있는가? 그와 관련된 ation? – Kunok