JS内存泄露排查方法

1、使用工具Heap Profiling

①、Heap Profiling可以记录当前的堆内存(heap)的快照,并生成对象的描述文件,该描述文件给出了当时JS运行所用的所有对象,以及这些对象所占用的内存大小、引用的层级关系等等。

②、JS运行的时候,会有栈内存(stack)和堆内存(heap),当我们new一个类的时候,这个new出来的对象就保存在heap里,而这个对象的引用则存储在stack里。程序通过stack的引用找到这个对象。例如:var a = [1,2,3],a是存储在stack中的引用,heap里存储着内容为[1,2,3]的Array对象。

③、打开调试工具,点击Memory中的Profiles标签,选中“Take Heap Snapshot”,点击“start”按钮,就可以拍在当前JS的heap快照了。


右边视图中列出了heap里的对象列表。

  • constructor:类名
  • Distance:对象到根的引用层级距离
  • Objects Count:该类的对象数
  • Shallow Size:对象所占内存(不包含内部引用的其他对象所占的内存)
  • Retained Size:对象所占的总内存(包含····················································)

点击上图左上角的黑圈圈,会出现第二个内存快照

2、内存泄露的排查


将上图框框切换到comparison(对照)选项,该视图列出了当前视图与上一个视图的对象差异

  • #New:新建了多少对象
  • #Deleted:回收了多少对象
  • #Delta:新建的对象个数减去回收的对象个数

重点看closure(闭包),如果#Delta为正数,则表示创建了闭包函数,如果多个快照中都没有变负数,则表示没有销毁闭包

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值