我记录了以下Chrome 错误,这导致我的代码中出现了许多严重且不明显的内存泄漏:
(这些结果使用 Chrome Dev Tools 的内存分析器,它运行 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() {}
如果该对象被同一上下文中的任何其他闭包引用,则闭包(在这种情况下,)似乎使所有对象保持“活动”状态,无论该闭包本身是否可访问。
我的问题是关于其他浏览器(IE 9+ 和 Firefox)中关闭的垃圾收集。我非常熟悉 webkit 的工具,例如 JavaScript 堆分析器,但我对其他浏览器的工具知之甚少,因此我无法对此进行测试。
在这三种情况下,IE9+ 和 Firefox 会垃圾收集 someClass
实例中的哪一种?