美文网首页
内存泄露那些事

内存泄露那些事

作者: sonlylee | 来源:发表于2017-03-28 23:03 被阅读0次

在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/

相关文章

  • 内存泄露那些事

    在JavaScript中,由于编码者忽略或者不注意某些细节,经常会造成内存泄露。 首先,什么是内存泄漏?这是个什么...

  • android性能优化之内存泄露分析

    今天聊一聊在android开发中内存泄露的那些事。 在开发中经常听人说到内存泄露和内存溢出这两个词语,有些同学可能...

  • 内存泄漏/管理

    ARC 下内存泄露的那些点performSelector延时调用导致的内存泄露iOS ARC下几种导致内存泄露的场...

  • 内存泄露系列文章(一) - 内存泄露原因及影响

    前言 内存泄露系列文章内存泄露系列文章(一) - 内存泄露原因及影响内存泄露系列文章(二) - 内存泄露监测及分析...

  • 内存泄露系列文章(三) - 内存泄露解决方案

    前言 内存泄露系列文章内存泄露系列文章(一) - 内存泄露原因及影响内存泄露系列文章(二) - 内存泄露监测及分析...

  • 内存溢出与内存泄露

    目录 [TOC] 1 内存泄露与内存溢出的区别 1.1 内存泄露 内存泄露(Memory Leak),指的是堆内存...

  • 内存泄漏详细分析

    首先,什么是内存泄露?经常听人谈起内存泄露,但要问什么是内存泄露,没几个说得清楚。内存泄露是指无用对象(不再使用的...

  • Java弱引用学习 WeakHashMap、ReferenceQ

    上一篇文章 Java内存泄露学习 ThreadLocal真的会内存泄露吗 提到ThreadLocal内存泄露的问题...

  • 内存优化

    内存优化主要是分析内存泄露和内存溢出。将从内存是怎么分配,内存怎么出现泄露和溢出,用工具判断什么情况出现泄露,找出...

  • 内存优化

    内存泄露的原因 四种引用类型 常见的内存泄露 1.内部类导致内存泄露 Handler 2.Context导致内存泄...

网友评论

      本文标题:内存泄露那些事

      本文链接:https://www.haomeiwen.com/subject/liusottx.html