【问题标题】:Memory leaks after location.reloadlocation.reload 后内存泄漏
【发布时间】:2013-11-28 10:38:21
【问题描述】:

我有一些类似下面的代码。

var domNode = somehowGet();

domNode.someEvent = function(){
    domNode.appendChild(createNodeUsing(window));
};

window.guid = createGuid(); // called at startup

调用 location.reload 后,我打开 DevTools 分析器并看到一些分离的树节点和额外的 Window 实例,它们的数量与重新加载的数量完全相同。

即如果我调用 location.reload 5 次,将会有 5 个额外的 Window 对象实例,并且它们都有不同的 Guid。

问题是 - 如果没有其他对 domNode 的引用,GC 会释放内存吗?

其他话我要知道为什么有几个Window实例

浏览器是 Chromium 的一些最新版本。

【问题讨论】:

  • 这样的代码超过 10 mb,我无法在可预测的时间范围内以适当的方式修复它。我需要知道这样的代码是否会导致内存泄漏。

标签: javascript html dom memory-leaks


【解决方案1】:

domNode.someEvent = function(){ } 是循环引用模式。 domNode 得到了 someEvent 的引用,它是一个属性,在这个 someEvent 函数中,domNode 仍然是可引用的(作为闭包)。

我不确定chrome是否可以回收内存,但我认为应该避免这种模式。

在此处查看更多详细信息。 http://javascript.info/tutorial/memory-leaks#ie-lt-8-dom-js-memory-leak

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多