我已经记录了以下Chrome错误,这导致我的代码中存在许多严重且非显而易见的内存泄漏:
(这些结果使用Chrome Dev Tools的内存分析器,它运行GC,然后获取未收集的所有内容的堆快照.)
在下面的代码中,someClass实例是垃圾回收(好):
var someClass = function() {};
function f() {
var some = new someClass();
return function() {};
}
window.f_ = f();
Run Code Online (Sandbox Code Playgroud)
但在这种情况下它不会被垃圾收集(坏):
var someClass = function() {};
function f() {
var some = new someClass();
function unreachable() { some; }
return function() {};
}
window.f_ = f();
Run Code Online (Sandbox Code Playgroud)
和相应的截图:

似乎闭包(在这种情况下,function() {})如果对象被同一上下文中的任何其他闭包引用,则所有对象都保持"活动",无论该闭包本身是否可以访问.
我的问题是关于其他浏览器(IE 9+和Firefox)的关闭垃圾收集.我对webkit的工具非常熟悉,比如JavaScript堆分析器,但我对其他浏览器的工具知之甚少,所以我无法对此进行测试.
在这三种情况中哪些将IE9 +和Firefox垃圾收集 someClass 实例?
javascript firefox internet-explorer garbage-collection google-chrome
我在内存利用率对我们非常重要的领域工作,因为我们不在您的经典 Web 浏览器/硬件上运行。
我们在应用程序中经常使用 null,我不清楚的一件事是 null 是否比将变量分配给 undefined 占用更多空间。
我们是否知道其中一个在内存使用方面的成本更高?
感谢帮助!