小编紫祥林*_*紫祥林的帖子

为什么这个js函数会导致内存泄漏?

我不明白这段代码是如何导致内存泄漏的。

var theThing = null;
var replaceThing = function () {
    var originalThing = theThing;
    var unused = function () {
        if (originalThing)
            console.log("hi");
    };
    theThing = {
        longStr: new Array(1000000).join('*'),
        someMethod: function () {
            console.log(someMessage);
        }
    };
};
setInterval(replaceThing, 1000);
Run Code Online (Sandbox Code Playgroud)

如果我originalThing在函数末尾设置为 null replaceThing,一切都会好起来的。但是我这里没有看到引用循环,不知道为什么这些闭包不能被释放。

v8 GC 不使用标记扫描吗?如果我将这些代码放入IIFE,内存泄漏仍然存在。但是根上下文如何到达这些变量和函数呢?我使用 chrome 来测试这些代码。现在我对 GC 如何在 Closure 上工作感到困惑。

javascript garbage-collection memory-leaks

5
推荐指数
1
解决办法
870
查看次数