浏览器中的内存泄露

作者:winter 来源:winter 博客 时间:2008-05-03 16:53:00 

首先说说什么是内存泄露,在一个进程中,如果某一块内存无法访问,且直到进程结束为止也无法释放,那么就发生了内存泄露。通常这种情况发生在C++之类的手动管理内存的语言编写的程序中,程序员忘记delete或者free会导致内存泄露。本文主要讨论的是浏览器中的内存泄露问题,也就是说,javascript程序导致的内存泄露。

目前为止最权威的关于浏览器内存泄露的文章应该是以下2篇 分别来自微软的Understanding and Solving Internet Explorer Leak Patterns(中文版)和来自IBM的Memory leak patterns in JavaScript(中文版)

但是这2篇对js语言的认识不够深入,所以讨论的内存泄露问题和解决方案都存在一些偏差。更重要的是,他们太老了,没有介绍IE7的内存泄露新模式。希望本文下面的部分能让读到此文的人更加清晰的认识内存泄露问题。

1.javascript对象的基础知识

(1)创建对象

 js中创建对象的方式非常自由,通常有这样几种:直接量、new表达式、内置函数、函数调用。后面是几个例子:
 直接量:{"a":10,"b":30}
 new表达式:var o=new cls();
 内置函数:var e=document.createElement("div");var a=new ActiveXObject("XML2.0.XMLHTTP");
 函数调用:function f(){};f();

(2)特殊的对象——作用域对象

  值得一提的是函数调用也会创建对象

 function f(){
   var a=10;
   var b=20;
  }

尽管按照语言标准无法以任何方式访问,但是f函数在每次执行时都会创建一个有属性a和b的对象,这被称为作用域对象。而js将维护一个被称为scope chain的链表,它是一条由当前可访问的所有作用域对象组成的链表。因为js的作用域规则是定义时的作用域,所以每个函数对象被创建时都会以一个属性[[scope]]保存它的外部作用域链。

特别地,在FireFox中,允许用__parent__访问[[scope]]属性所属的函数

  关于js的更多,可以去查阅js标准文档ECMA262(HTML版),这里无法完整地介绍js的对象机制。

标签:内存,泄露,浏览器,js
0
投稿

猜你喜欢

  • 再论Javascript的类继承

    2010-06-26 12:48:00
  • 如何固定表格的标题行和标题列

    2007-09-20 13:03:00
  • 用ASP读取/写入UTF-8编码格式的文件

    2007-08-20 09:29:00
  • 扫盲大讲堂:mysql出错的代码解析及解答

    2009-09-05 10:08:00
  • SQL Server查询速度慢的原因及优化方法

    2009-01-05 13:46:00
  • 将有安全问题的SQL过程删除,比较全面

    2007-08-06 14:46:00
  • 通用分页存储过程

    2007-11-28 13:08:00
  • DreamweaverMX2004技巧两则

    2010-09-05 21:10:00
  • ASP MSSQL存储过程的实现小例

    2011-04-06 11:02:00
  • 什么是XSLT,什么是XPath

    2008-01-21 13:12:00
  • 教你快速掌握怎样在Windows下升级MySQL

    2008-12-31 17:08:00
  • SQL Server 2005中的CLR集成

    2009-03-10 15:07:00
  • 一些CSS样式书写技巧

    2007-10-16 12:57:00
  • 白鸦:贪守米缸者,饿死灶台

    2009-02-23 13:03:00
  • SQL注入防御:用三种策略应对SQL注入攻击

    2008-12-15 16:31:00
  • [译]开发人员经常犯的8个设计错误

    2008-02-01 12:28:00
  • Mysql Innodb 引擎优化

    2010-10-25 20:01:00
  • 制作设置404页面

    2009-07-03 13:01:00
  • asp如何实现按照输入汉字提示拼音功能?

    2010-05-18 18:37:00
  • 如何让用户再次访问我的网站时不需再提交相关信息?

    2010-05-16 15:05:00
  • asp之家 网络编程 m.aspxhome.com