我已经记录了下面的 铬虫,它导致了我的代码中许多严重和不明显的内存泄漏:
(这些结果使用 Chrome 开发工具的 内存剖析器内存剖析器,它运行 GC,然后对没有垃圾收集的所有内容进行堆快照。)
在下面的代码中,someClass
实例被垃圾回收(很好) :
var someClass = function() {};
function f() {
var some = new someClass();
return function() {};
}
window.f_ = f();
但在这种情况下,它不会被垃圾收集(糟糕) :
var someClass = function() {};
function f() {
var some = new someClass();
function unreachable() { some; }
return function() {};
}
window.f_ = f();
以及相应的截图:
如果对象在同一上下文中被任何其他闭包引用,那么闭包(在本例中是 function() {}
)似乎可以保持所有对象“活动”,无论该闭包本身是否可访问。
我的问题是关于其他浏览器(IE9 + 和 Firefox)中闭包的垃圾收集。我非常熟悉 webkit 的工具,比如 JavaScript 堆分析器,但是我对其他浏览器的工具知之甚少,所以我还不能测试它。
在这三种情况中,IE9 + 和 Firefox 垃圾将收集 someClass
< strong > 实例?