道非道 非常道

勤思、谨言、慎行、厚积、薄发

统计

web

天圆

经济 政治 军事

键康

javascript 垃圾收集( 内存释放 )

转自:http://www.microsoft.com/china/msdn/library/webservices/WebApp/mac0301WebQA.mspx?mfr=true

问:我有一些关于 JScript® 中垃圾回收的问题。我认为在 Microsoft® Internet Explorer 6.0 中有内存泄漏,但在另一方面,它可能是循环引用问题。在我的代码中,我假设“new Object()”属于 JScript,而“document.createElement”属于 Internet Explorer DOM,因此 JScript 中的垃圾回收器无法释放 DOM 元素。这正确吗?避免这一问题的最佳方法是什么呢?

当您将代码加载到 Internet Explorer 6.0 中并单击“Refresh”时,您可以在“Task Manager”中观察到内存增加:

<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>

答:这不是内存泄漏。您正在页面上创建新文本一千次!这会使页面变大。如果您创建了许多无法获得也无法释放的对象,那才是内存泄漏。在 这里,您将创建许多元素,Internet Explorer 需要保存它们以正确呈现页面。Internet Explorer 并不知道您以后不会运行操纵您刚刚创建的所有这些对象的脚本。

当页面消失时(当您浏览完,离开浏览器时)会释放内存。它不会泄漏。当销毁页面时,会中断循环引用。









posted on 2009-12-02 15:10 星期五 阅读(365) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: