GC与JS内存泄露(3)
作者:alucard 来源:Alibaba.com UED 时间:2010-09-25 19:01:00
在IE 6中,对于javascript object内部,javascript使用的是mark-and-sweep算法,这点前面也有提到,因此,纯粹的javascript对象的使用,不会造成内存泄露,但是对于javascript object与外部object(包括native object和vbscript object等等)的引用时,IE 6使用引用计数,这样一来,内存泄露就产生了。这点在犀牛书第八章函数部分有提到。
以下是常见的几种javascript内存泄露的情况:
一、循环引用:
< html >
< head >
< script language = ” JScript ” >
var myGlobalObject;
function SetupLeak() // 产生循环引用,因此会造成内存泄露
{
// First set up the script scope to element reference
myGlobalObject = document.getElementById( ” LeakedDiv ” );
// Next set up the element to script scope reference
document.getElementById( ” LeakedDiv ” ).expandoProperty = myGlobalObject;
}
</ script >
</ head >
< body onload = ” SetupLeak() ” >
< div id = ” LeakedDiv ” ></ div >
</ body >
</ html >
我们可以看到,myGlobalObject指向了一个DOM对象,而这个DOM对象的一个属性又指向了myGlobalObject,循环引用出现,内存泄露,其原理如下:
解决方案很简单,在确保属性不再使用后,加入以下代码就可以了:
function BreakLeak() // 解开循环引用,解决内存泄露问题
{
document.getElementById( ” LeakedDiv ” ).expandoProperty = null ;
}
说起来容易,不过当我们程序非常复杂的时候,发现和修改就没有这么容易了。
标签:内存,js,javascript,IE
0
投稿
猜你喜欢
python一行sql太长折成多行并且有多个参数的方法
2022-06-21 03:47:04
简单实例解释Oracle分页查询
2023-07-16 00:54:03
举例讲解Python中的list列表数据结构用法
2021-05-07 08:02:53
六个实用Pandas数据处理代码
2023-03-01 05:29:00
Python中的条件判断语句基础学习教程
2021-06-19 11:51:36
OpenCV立体图像深度图Depth Map基础
2021-09-23 22:12:59
SQL 中 CASE 表达式的使用方式
2024-01-23 14:18:47
MySQL的安全问题从安装开始说起
2024-01-14 05:11:24
MSSQL数据加密解密代码
2024-01-18 05:22:34
微信公众号token验证失败解决方案
2022-01-22 14:33:45
使用Docker制作Python环境连接Oracle镜像
2021-02-21 23:42:47
Python获取当前函数名称方法实例分享
2023-12-22 01:16:57
vscode+PyQt5安装详解步骤
2021-07-27 23:52:55
Python引用(import)文件夹下的py文件的方法
2023-09-28 11:14:00
python实现线性插值的示例
2023-08-10 21:33:55
Python中寻找数据异常值的3种方法
2023-10-18 11:21:41
你知道mysql哪些查询情况不走索引吗
2024-01-15 06:32:00
详解js加减乘除精确计算
2024-04-18 10:47:10
MySQL的root帐户密码重置方法
2007-08-24 15:53:00
解决pandas .to_excel不覆盖已有sheet的问题
2022-12-02 22:42:25