我已记录以下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
实例?
unreachable
函数从未执行过,因此实际上未记录任何内容。