轉(zhuǎn)自:http://www.microsoft.com/china/msdn/library/webservices/WebApp/mac0301WebQA.mspx?mfr=true
問:我有一些關(guān)于 JScript® 中垃圾回收的問題。我認(rèn)為在 Microsoft® Internet Explorer 6.0
中有內(nèi)存泄漏,但在另一方面,它可能是循環(huán)引用問題。在我的代碼中,我假設(shè)“new Object()”屬于
JScript,而“document.createElement”屬于 Internet Explorer DOM,因此 JScript
中的垃圾回收器無法釋放 DOM 元素。這正確嗎?避免這一問題的最佳方法是什么呢?
當(dāng)您將代碼加載到 Internet Explorer 6.0 中并單擊“Refresh”時(shí),您可以在“Task Manager”中觀察到內(nèi)存增加:
<html>
<body>
<script type="text/JScript">
for (i=0; i<1000; i++) { // this loop enforces the effect
var model = new Object();
var element = document.createElement("<br>");
model.myElement = element;
element.myModel = model;
model = null;
element = null;
}
</script>
</body>
</html>
答:這不是內(nèi)存泄漏。您正在頁面上創(chuàng)建新文本一千次!這會(huì)使頁面變大。如果您創(chuàng)建了許多無法獲得也無法釋放的對(duì)象,那才是內(nèi)存泄漏。在
這里,您將創(chuàng)建許多元素,Internet Explorer 需要保存它們以正確呈現(xiàn)頁面。Internet Explorer
并不知道您以后不會(huì)運(yùn)行操縱您剛剛創(chuàng)建的所有這些對(duì)象的腳本。
當(dāng)頁面消失時(shí)(當(dāng)您瀏覽完,離開瀏覽器時(shí))會(huì)釋放內(nèi)存。它不會(huì)泄漏。當(dāng)銷毀頁面時(shí),會(huì)中斷循環(huán)引用。