首页 雷火电竞正文

粉刺,JavaScript内存走漏-雷火电竞csgo

admin 雷火电竞 2019-12-02 259 0

内存走漏简介

内存走漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未开释或无法开释,形成体系内存的糟蹋,导致程序运转速度减慢乃至体系溃散等严重后果。

内存走漏缺点具有隐蔽性、堆集性的特征,比其他内存不合法拜访差错更难检测。由于内存走漏的发生原因是内存块未被开释,归于遗失型缺点而不是差错型缺点。此外,内存走漏一般不会直接发生可调查的差错症状,而是逐步堆集,下降体系全体功能,极点的状况下可能使体系溃散。

废物收回机制

最常运用的办法叫做”引证计数”(reference counting):言语引擎有一张”引证表”,保存了内存里边一切的资源(一般是各种值)的引证次数。假如一个值的引证次数是0,就表明这个值不再用到了,因而能够将这块内存开释。


const arr = [1, 2, 3, 4];
console.log('hello world');

上面代码中,数组[1, 2, 3, 4]是一个值,会占用内存。变量arr是仅有的对这个值的引证,因而引证次数为1。虽然后边的代码没有用到arr,它仍是会继续占用内存。


let arr = [1, 2, 3, 4];
console.log('hello world');
arr = null;

上面代码中,arr重置为null,就解除了对[1, 2, 3, 4]的引证,引证次数变成了0,内存就能够开释出来了。

内存走漏的辨认办法

经历法则是,假如接连五次废物收回之后,内存占用一次比一次大,就有内存走漏。这就要求实时检查内存占用。

浏览器辨认

Chrome 浏览器检查内存占用,依照以下过程操作。



  1. 翻开开发者东西,挑选 Timeline 面板
  2. 在顶部的Capture字段里边勾选 Memory
  3. 点击左上角的录制按钮。
  4. 在页面上进行各种操作,模仿用户的运用状况。
  5. 一段时刻后,点击对话框的 stop 按钮,面板上就会显现这段时刻的内存占用状况。

假如内存占用根本平稳,挨近水平,就阐明不存在内存走漏。

命令行辨认

命令行能够运用 Node 供给的process.memoryUsage办法。


console.log(process.memoryUsage());
// { rss: 27709440,
// heapTotal: 5685248,
// heapUsed: 3449392,
// external: 8772 }

process.memoryUsage回来一个目标,包含了 Node 进程的内存占用信息。该目标包含四个字段,单位是字节,意义如下。


  • rss(resident set size):一切内存占用,包含指令区和仓库。
  • heapTotal:”堆”占用的内存,包含用到的和没用到的。
  • heapUsed:用到的堆的部分。
  • external: V8 引擎内部的 C++ 目标占用的内存。

判别内存走漏,以heapUsed字段为准。

WeakSet 和 WeakMap

前面说过,及时铲除引证非常重要。可是,你不可能记住那么多,有时分一忽略就忘了,所以才有那么多内存走漏。

最好能有一种办法,在新建引证的时分就声明,哪些引证有必要手动铲除,哪些引证能够忽略不计,当其他引证消失今后,废物收回机制就能够开释内存。这样就能大大减轻程序员的担负,你只需铲除首要引证就能够了。

ES6 考虑到了这一点,推出了两种新的数据结构:WeakSet 和 WeakMap。它们关于值的引证都是不计入废物收回机制的,所以姓名里边才会有一个”Weak”,表明这是弱引证。详细详细看阮一峰的ECMAScript 6 入门。

雷火电竞版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

奔驰g,重磅!北京出土地新规 住所用地出让不再“搭”商办-雷火电竞csgo

  • 鸡蛋,重磅!出资最低资本金份额可降5个百分点 权益东西可筹一半资本金-雷火电竞csgo

    鸡蛋,重磅!出资最低资本金份额可降5个百分点 权益东西可筹一半资本金-雷火电竞csgo

  • 最近发表

      雷火电竞csgo_雷火电竞2_雷火竞猜

      http://www.myriaresearch.com/

      |

      Powered By

      使用手机软件扫描微信二维码

      关注我们可获取更多热点资讯

      雷火电竞出品