js中使用解除引用优化内存使用
2012-06-13 16:51
344 查看
js具有垃圾收集机制,但是有时候我们需要通过解除引用来优化内存使用,例如下面的:
虽然,在函数createDog()执行完毕后,局部变量对象被消耗,从而在函数体内定义的变量和对象所占用的内存也被js的GC所回收,但是在全局变量对象中的dogInstance依然却没有被消耗,手动的设置为null,就可以告诉GC去回收其占用的内存。
在IE浏览器中由于有部分的对象并非js的原生对象,如BOM和DOM对象,它们是使用C++以COM组件的形式实现的,而COM采取引用计数的策略,而这样的话,有时候会出现一些循环引用的问题,造成内存消耗,引起性能问题,如下面的代码:
上面的代码引用计数将永远都是2,所以需要我们手动的去解除引用,如下面:
这样当浏览器下次运行时,就会删除这些值并回收其所占用的内存。
<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>
这样当浏览器下次运行时,就会删除这些值并回收其所占用的内存。
相关文章推荐
- Android性能优化之巧用软引用与弱引用优化内存使用
- Android性能优化之巧用软引用与弱引用优化内存使用
- Android性能优化之巧用软引用与弱引用优化内存使用
- ”弱引用“”来优化使用“内部类”造成的内存溢出
- 今日内容介绍 1、自定义类型的定义及使用 2、自定义类的内存图 3、ArrayList集合的基本功能 4、随机点名器案例及库存案例代码优化 ###01引用数据类型_类 * A: 数据类型
- Android性能优化之巧用软引用与弱引用优化内存使用
- Android性能优化之巧用软引用与弱引用优化内存使用
- wp7蛋疼的90M内存限制,优化图片使用内存(3)
- Delphi结构中使用String时遇到的内存泄露问题(没有利用String的引用计数自动销毁字符串的功能)
- 使用gc、objgraph干掉python内存泄露与循环引用!
- Redis内存使用优化与存储
- 56:Spark中的Tungsten内存和CPU的优化使用
- 【十五分钟Talkshow】如何理解并优化.NET应用程序对内存的使用
- 如何理解并优化.NET应用程序对内存的使用
- Android开发优化之——使用软引用和弱引用
- Redis 内存使用优化与存储
- Android开发优化之——使用软引用和弱引用
- 使用hashmap优化压缩Redis内存使用
- c++中优化内存分配:new/delete操作符;allocator类对象的使用;operator new/operator delete函数及定位new表达式
- APACHE优化之apache的内存使用