Javascript 엔진이 순환 참조를 처리하는 방법을 자세히 설명 할 수 있습니까? 브라우저 나 node.js간에 큰 차이점이 있습니까?Javascript/Garbage collector의 순환 참조
내가 말하고자하는 것은 객체 내의 명시적인 백/다음 참조입니다. 예 :
var objA = {
prop: "foo",
next: null
};
var objB = {
prop: "foo",
prev: null
};
objA.next = objB;
objB.prev = objA;
우리가 간다. console.log(objA)
을 수행하면 무한 사슬을 만들었습니다. 큰 문제는이게 나쁜 것입니까? 명시 적으로 청소하지 않으면 메모리 누수가 발생합니까?
그래서 우리는
objA.next = null;
objB.prev = null;
해야합니까 또는 가비지 수집이 같은 별자리에 우리를 돌볼 것인가?
http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Closures#Closures가 잘못 되었습니까? – Sandro
@Sandro가 내 대답을 다시 읽었습니다. :) 제정신의 GC는 사이클을 잘 처리합니다. IE6보다 새로운 모든 것은 정상적인 것으로 간주 될 수 있습니다. IE6를 지원해야한다면 부서진 사이클 처리에 대해 걱정해야합니다. 분명히 Google 가이드는 이러한 깨진 브라우저가 지원되어야한다는 가정하에 작성되었으므로 일부 추가 농구를 뛰어 넘어야합니다. – jalf
@Sandro 그 예에서 특별한 점이 있습니다. DOM 요소는 순환 참조의 한 부분입니다. 일반적으로 페이지를 닫을 때까지 메모리가 누출됩니다. 그러나 올바르게 호출 한 경우 IE가 탐색 할 때 IE가 DOM에 대한 참조를 항상 제거하지는 않습니다. (분명히 일부 페이지가 어땠어?) –