다음 자바 스크립트 코드는 메모리 누수가있는 것 같지만 이유는 확실하지 않습니다. 내가 크롬 19, 파이어 폭스 (12)이 시도했습니다 코드는 다음과 같습니다 : 당신이 계속 클릭하면자바 스크립트 removeChild 메모리 누출?
<body>
<input id="add" type="button" value="add" onclick="add()" />
<input id="remove" type="button" value="remove" onclick="remove()" />
<div id="content">
</div>
</body>
<script>
var count = 0;
function add() {
var i = 0,
newdiv;
for (i = 0; i < 10000; i++) {
newdiv = document.createElement('div');
document.getElementById("content").appendChild(newdiv);
newdiv.setAttribute('id', "div" + count);
newdiv.innerHTML = "section " + count;
newdiv = null;
count = count + 1;
}
}
function remove() {
var i = 0;
for (i = 0; i < count; i++) {
document.getElementById("content").removeChild(document.getElementById("div" + i));
}
count = 0;
}
</script>
이 버튼을 추가 한 다음 이 Windows 작업 관리자의 메모리가 계속 증가 버튼을 제거 . 가비지 수집이 시작될 때 어느 시점에서 메모리가 감소 할 것으로 예상 했었지만 결코 발생하지 않는 것으로 보입니다.
내 질문은 : 이 코드에서 메모리 누수가 있습니까? 그리고 만약 그렇다면 내가 누설을 수정하는 코드를 리팩토링 할 수 있습니까?
Chromium 19/Ubuntu 11.04에서 메모리 문제없이 수행하는 것 같습니다. –
'newdiv = null;'은'delete newdiv;'와 같지 않기 때문에'undefined'가 아닌'null'을 일부 설정하는 것보다 삭제하는 것이 낫다고 생각할 수도 있습니다 ... 문서의 로컬 저장된 참조 및 폐쇄에 모든 것을 실행하고 글로벌 창에 물건을 만들지 obhect 심지어이 일을 속도를 줄이고 메모리 사용량을 줄이기 imho –