GC与JS内存泄露(6)

作者:alucard 来源:Alibaba.com UED 时间:2010-09-25 19:01:00 

但LeakMemory却会造成泄露。原因是LeakMemory()会先建立起parentDiv和childDiv之间的连接,这时候,为了让 childDiv能够获知parentDiv的信息,因此IE需要先建立一个临时的scope对象。而后parentDiv建立了和 hostElement对象的联系,parentDiv和childDiv直接使用页面document的scope。可惜的是,IE不会释放刚才那个临时的scope对象的内存空间,直到我们跳转页面,这块空间才能被释放。而CleanMemory函数不同,他先把parentDiv和 hostElement建立联系,而后再把childDiv和parentDiv建立联系,这个过程不需要单独建立临时的scope,只要直接使用页面 document的scope就可以了, 所以也就不会造成内存泄露了。但是,需要特别说明一下,如果LeakMemory方法里面,创建的div对象上不绑定script事件,那么也不会有泄漏,这个可以理解为ie的bug,大家记住就可以了,不需要过分深究。其原理如下:

四、Pseudo-Leaks

同样可以理解为ie的bug的一种泄露:

<html>
    <head>
        <script language="JScript">
        function LeakMemory()
        {
            // Do it a lot, look at Task Manager for memory response
            for(i = 0; i < 5000; i++)
            {
                hostElement.text = “function foo() { }”;
            }
        }
        </script>
    </head>
    <body>
        <button onclick=”LeakMemory()”>Memory Leaking Insert</button>
        <script id=”hostElement”>function foo() { }</script>
    </body>
</html>

没什么特别的好解释,记住就可以了。

关于这四种泄漏的具体描述,还是请各位参照原文:http://msdn.microsoft.com/en-us/library/Bb250448

以上是几种主要的泄露,当然,除此之外,网上还有一些其他的讨论,比如var str = "lalala";alert(str.length);这个简单的语句也会造成内存泄露,原因是类型转换的时候,ie生成了一个临时对象,这个临时对象被泄漏了。类似情况还有很多,大家有兴趣可以自己去搜集整理。

最后说一下,只要ie6还健在,作为前端开发人员,就不能逃避这些问题,当然,也不必过分深究,比如闭包的情况就比较难避免,就像我一开始说的,毕竟,javascript造成的内存泄露不是程序和项目的瓶颈,我们需要在各方面进行权衡。

原文:http://www.aliued.cn/?p=2908

标签:内存,js,javascript,IE
0
投稿

猜你喜欢

  • 使用 JavaScript 获取本地盘符

    2010-01-12 13:49:00
  • php mysql PDO 查询操作的实例详解

    2023-11-14 18:32:28
  • Python实现数字的格式化输出

    2021-10-11 18:11:27
  • python实现随机梯度下降法

    2023-11-02 16:55:37
  • Python利用matplotlib绘制约数个数统计图示例

    2023-11-12 16:00:43
  • Spring + mybatis + mysql使用事物的几种方法总结

    2024-01-22 02:01:25
  • Python3 Tkinter选择路径功能的实现方法

    2022-03-12 19:39:28
  • python中单下划线(_)和双下划线(__)的特殊用法

    2022-08-09 22:23:22
  • PHP中DirectIO操作文件扩展的用法大全

    2023-06-13 13:58:45
  • Vue.js使用axios动态获取response里的data数据操作

    2024-05-08 09:34:06
  • 网页布局的位置重心与位置间的对比关系

    2007-10-15 19:20:00
  • Python 条件判断的缩写方法

    2021-04-20 16:06:20
  • 用SQL语句删除重复记录的四种方法

    2011-05-03 09:25:00
  • 连接pandas以及数组转pandas的方法

    2021-11-12 12:12:09
  • 在antd Form表单中select设置初始值操作

    2024-05-02 17:03:12
  • SQL事务用法begin tran,commit tran和rollback tran的用法

    2024-01-20 01:44:57
  • python 使用pygame工具包实现贪吃蛇游戏(多彩版)

    2021-05-10 17:29:19
  • python 经纬度求两点距离、三点面积操作

    2021-05-16 17:48:17
  • Selenium+BeautifulSoup+json获取Script标签内的json数据

    2023-06-17 09:30:18
  • sqlserver2005利用临时表和@@RowCount提高分页查询存储过程性能示例分享

    2024-01-21 05:41:06
  • asp之家 网络编程 m.aspxhome.com