javascript 垃圾收集( 內(nèi)存釋放 )
轉(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”時,您可以在“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)建新文本一千次!這會使頁面變大。如果您創(chuàng)建了許多無法獲得也無法釋放的對象,那才是內(nèi)存泄漏。在 這里,您將創(chuàng)建許多元素,Internet Explorer 需要保存它們以正確呈現(xiàn)頁面。Internet Explorer 并不知道您以后不會運行操縱您剛剛創(chuàng)建的所有這些對象的腳本。
當(dāng)頁面消失時(當(dāng)您瀏覽完,離開瀏覽器時)會釋放內(nèi)存。它不會泄漏。當(dāng)銷毀頁面時,會中斷循環(huán)引用。