【发布时间】:2017-07-19 00:43:46
【问题描述】:
我不明白这段代码是如何导致内存泄漏的。
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);
如果我在函数replaceThing 的末尾设置originalThing 为null,一切都会好起来的。但是这里没有看到引用循环,也不知道为什么这些闭包不能释放。
v8 GC 不使用标记扫描吗?如果我把这些代码放到 IIFE 中,内存泄漏仍然存在。但是根上下文如何才能到达这些变量和函数呢? 我使用 chrome 测试了这些代码。现在我对 GC 在 Closure 上的工作方式感到困惑。
【问题讨论】:
标签: javascript memory-leaks garbage-collection