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
  • asp之家 网络编程 m.aspxhome.com