你觉得内存泄露怎么侦测(适用于平常工做和面试)

检查内存泄漏的工具及使用方法:

  1. f12打开谷歌开发者工具
  2. 选择memory--Profiles--Heap snapshot
  3. 进入要检查的页面,并在内存变化以前(从下面的例子来讲的话,就是在第一个setTimeout以前,也就是闭包产生以前)点击 Take snapshot,此时浏览器会保存一个当前内存的快照。
  4. 而后变化以后再次点击左上角(Profiles上面)的黑色按钮,再保存一个内存快照。
  5. 分别选择两次快照,并点击summary旁边的下箭头,选择下拉列表中的comparison,这个选项下呈现的是本次(两次快照之间可能存在屡次变化,只对比当次与上次间的变化)变化先后的内存差别(固然,初始的快照由于没有变化,因此该列无内容)。
  6. 选择下方constructor中的closure,该选项下呈现的都是变化先后闭包的相关内容。其中new这一栏有·(黑点),表示本次变化新增闭包内存的占用,deleted这一栏有·(黑点),表示本次变化清除该闭包占用的内存。

用例

//全局做用域下写了如下代码
//发生内存泄漏的例子
var obj = {};
function outFun (){
    var a = 0;
    return function innerFun(b){
        a+=b;
        return a;
    }
}
setTimeout(function (){
    obj.newFunc = outFun();
    console.log(obj.newFunc(1)); //1
},3000);
setTimeout(function (){
    obj.newFunc = null;
    console.log('clean'); //clean
},6000);
复制代码

观察分析

  1. 初始时内存快照,无变化,因此无内容
  2. 第一个settimeout以后,本次建立了闭包并占用了内存
  3. 第二个settimeout以后,本次变化将引用闭包的对象属性置空,闭包占用的内存被释放

文中相关

闭包的深刻分析与探究请看这里: 你觉得什么是闭包浏览器

写在最后

须要声明的一点是,我不是一个教授者,我只是一个分享者、一个讨论者、一个学习者,有不一样的意见或新的想法,提出来,咱们一块儿研究。分享的同时,并不仅是被分享者在学习进步,分享者亦是。bash

知识遍地,拾到了就是你的。闭包

既然有用,不妨点赞,让更多的人了解、学习并提高。工具

相关文章
相关标签/搜索