Javascript 쓰레기 수집 IE8 메모리 넘 침

1258 단어
[설명]
자바 스 크 립 트 고급 프로 그래 밍 (제3 판), 4.3 절, 쓰레기 수집
[개괄]
1. 쓰레기 수집 기 는 무용 변수 표 지 를 식별 하여 회수 할 수 있 는 지 확인한다.
2. 불필요 한 변 수 를 표시 하 는 전략 은 실현 에 따라 다 를 수 있 지만 브 라 우 저 에서 의 실현 은 보통 두 가지 전략 이 있 습 니 다.
3. JavaScript 에서 가장 많이 사용 되 는 쓰레기 수집 정책 은 태그 제거 입 니 다. 대부분의 브 라 우 저 는 이러한 정책 을 사용 합 니 다.
4. 자주 사용 되 지 않 는 쓰레기 수집 전략 은 인용 계수 라 고 하 는데 한 번 인용 + 1, 인용 취소 하면 - 1, 0 이면 수집 합 니 다.
Navigator 3.0 에 서 는 이러한 방식 을 사용 합 니 다. bug 가 있 습 니 다. 순환 참조:
 function problem(){
    var objectA = new Object();
    var objectB = new Object();
    
    objectA.someOtherObject = objectB;
    objectB.anotherObject = objectA;
 }

5. IE9 이전에 IE 의 JavaScript 엔진 은 명확 한 태그 정책 을 사 용 했 습 니 다.
그러나 BOM 과 DOM 대상 은 모두 C + + 의 COM 대상 을 사용 하여 이 루어 지고 COM 대상 의 쓰레기 수집 체 제 는 계수 전략 을 참조 합 니 다.
따라서 IE 에 서 는 BOM 이나 DOM 대상 과 관련 된 경우 순환 참조 문제 가 발생 합 니 다.
예 를 들 면:
var element = document.getElementById("some_element");
var myObject = new Object();
myObject.element = element;
element.someObject = myObject;

myObject (js) 의 속성 은 element (DOM), element (DOM) 의 속성 은 myObject (js),
따라서 요소 가 페이지 에서 제거 되 어도 회수 되 지 않 습 니 다!
6. IE9 에서 BOM 과 DOM 을 모두 진정한 자 바스 크 립 트 대상 으로 전환 했다.

좋은 웹페이지 즐겨찾기