다음 Chrome 버그를 기록했습니다 . 이로 인해 코드에서 심각하고 분명하지 않은 메모리 누수가 많이 발생했습니다.
(이 결과 는 GC를 실행하고 가비지 수집되지 않은 모든 것의 힙 스냅 샷을 생성하는 Chrome Dev Tools의 메모리 프로파일 러 를 사용합니다.)
아래 코드에서 someClass
인스턴스는 가비지 수집됩니다 (양호).
var someClass = function() {};
function f() {
var some = new someClass();
return function() {};
}
window.f_ = f();
그러나이 경우 가비지 수집되지 않습니다 (나쁜).
var someClass = function() {};
function f() {
var some = new someClass();
function unreachable() { some; }
return function() {};
}
window.f_ = f();
그리고 해당 스크린 샷 :
클로저 (이 경우 function() {}
)는 객체가 동일한 컨텍스트에서 다른 클로저에 의해 참조되는 경우 클로저 자체에 도달 할 수 있는지 여부에 관계없이 모든 객체를 "생존"상태로 유지 하는 것으로 보입니다 .
내 질문은 다른 브라우저 (IE 9 이상 및 Firefox)의 가비지 수집에 관한 것입니다. JavaScript 힙 프로파일 러와 같은 웹킷 도구에 익숙하지만 다른 브라우저 도구는 거의 알지 못하므로 테스트 할 수 없습니다.
이 세 가지 경우 중 IE9 +와 Firefox 가비지가 인스턴스를 수집 someClass
합니까?
unreachable
함수는 절대 실행되지 않으므로 실제로 기록되는 것은 없습니다.