内存泄露那些事

在JavaScript中,由于编码者忽略或者不注意某些细节,经常会造成内存泄露。

首先,什么是内存泄漏?这是个什么东西?

      内存泄露是指分配给应用的内存不能被重新分配,即使在内存已经不被使用的时候。正常情况下,垃圾回收器在 DOM 元素和 event 处理器不被引用或访问的时候回收它们。但是,IE 的早些版本(IE7和之前)中内存泄露是很容易出现的,因为内存管理器不能正确理解 Javascript 生命周期而且在周期被打破(可以通过赋值为 null 实现)前不会回收内存。内存泄露会降低 Web 应用程序的性能,直到浪费的内存超过了系统所能分配的,应用程序将不能使用。

这个东西很可怕,怎样造成了这样子?

1) 循环引用

       一个很简单的例子:一个 DOM 对象被一个 Javascript 对象引用,与此同时又引用同一个或其它的 Javascript 对象,这个 DOM 对象可能会引发内存泄露。这个 DOM 对象的引用将不会在脚本停止的时候被垃圾回收器回收。要想破坏循环引用,引用 DOM 元素的对象或 DOM 对象的引用需要被赋值为 null。

2) Javascript 闭包

       闭包可以导致内存泄露是因为内部方法保持一个对外部方法变量的引用,所以尽管方法返回了,内部方法还可以继续访问在外部方法中定义的私有变量。对 Javascript 程序员来说最好的做法是在页面重载前断开所有的事件处理器。

3) DOM 插入顺序

       当 2 个不同范围的 DOM 对象附加到一起的时候,一个临时的对象会被创建。这个 DOM 对象改变范围到 document 时,那个临时对象就没用了。也就是说, DOM 对象应该按照从当前页面存在的最上面的 DOM 元素开始往下直到剩下的 DOM 元素的顺序添加,这样它们就总是有同样的范围,不会产生临时对象。

垃圾回收

      javascript是一门具有自动垃圾收集机制的编程语言,执行环境会负责管理代码执行过程中使用的内存,人为不用管。这种机制就是:找出那些补在继续使用的变量,然后释放其占用的内存。所以,垃圾收集器会按照固定的时间间隔,周期性地执行这一操作。

方法:标记清除,给当前不使用的值加上标记,然后将其回收。另一种就是“引用计数“,跟踪记录所有的值被引用的次数。

kb.cnblogs.com/page/141401/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 介绍 内存泄露是每个开发者最终都不得不面对的问题。即便使用自动内存管理的语言,你还是会碰到一些内存泄漏的情况。内存...
    太阳mob阅读 5,918评论 1 9
  • 内存泄露是每个开发者最终都不得不面对的问题。即便使用自动内存管理的语言,你还是会碰到一些内存泄漏的情况。内存泄露会...
    他在发呆阅读 3,685评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,008评论 18 399
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,471评论 11 349
  • 在本文中,我们将探讨客户端JavaScript代码中常见的内存泄漏类型。 我们还将学习如何使用Chrome开发工具...
    wengjq阅读 13,684评论 4 40