首页 > 编程知识 正文

js内存泄漏及解决方法,js操作内存泄露

时间:2023-05-03 16:24:33 阅读:277292 作者:962

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为正数,则表示创建了闭包函数,如果多个快照中都没有变负数,则表示没有销毁闭包

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。