您的位置:首页 > Web前端 > JavaScript

js中使用解除引用优化内存使用

2012-06-13 16:51 344 查看
js具有垃圾收集机制,但是有时候我们需要通过解除引用来优化内存使用,例如下面的:

<script type="text/javascript">
function createDog(){
var localDog = new Object();
localDog.name = name;
return localDog;
}
var dogInstance = createDog("xiaobai");
dogInstnace = null;
</script>


虽然,在函数createDog()执行完毕后,局部变量对象被消耗,从而在函数体内定义的变量和对象所占用的内存也被js的GC所回收,但是在全局变量对象中的dogInstance依然却没有被消耗,手动的设置为null,就可以告诉GC去回收其占用的内存。

在IE浏览器中由于有部分的对象并非js的原生对象,如BOM和DOM对象,它们是使用C++以COM组件的形式实现的,而COM采取引用计数的策略,而这样的话,有时候会出现一些循环引用的问题,造成内存消耗,引起性能问题,如下面的代码:

<script type="text/javascript">
var ele = document.getElementById("some_ele");
var myObject = new Object();
myObject.ele = ele;
ele.someObject = myObject;
</script>


上面的代码引用计数将永远都是2,所以需要我们手动的去解除引用,如下面:

<script type="text/javascript">
var ele = document.getElementById("some_ele");
var myObject = new Object();
myObject.ele = ele;
ele.someObject = myObject;
/*------------------*/
myObject.ele = null;
ele.someObject = null;
</script>


这样当浏览器下次运行时,就会删除这些值并回收其所占用的内存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: