【问题标题】:Do i need to delete dom fragments or will the garbage collector remove them?我需要删除 dom 片段还是垃圾收集器会删除它们?
【发布时间】:2011-09-26 08:55:04
【问题描述】:

这可能是一个有点愚蠢的问题。我假设垃圾收集器在函数结束执行后处理任何悬空变量,但我想知道这是否也适用于 DOM 片段。

如果我为此创建一个 DOM 片段或任何未附加的节点,垃圾收集器会在函数执行完成后将其删除吗?

//would this create a memory leak?
setInterval(function exampleScope() {
    var unusedDiv = document.createElement('div');
}, 10);

我知道这个例子没用,但它是我担心的最简单的模式形式。我只想知道我在做正确的事。我一直在努力构建一个非常高性能的 JavaScript 游戏引擎,Red Locomotive。我不想添加任何内存泄漏。

【问题讨论】:

    标签: javascript optimization memory-leaks


    【解决方案1】:

    在事件处理程序中存在带有 DOM 元素的 IE 7 内存泄漏:jQuery leaks solved, but why?

    使用其他浏览器应该没问题。见Freeing memory used by unattached DOM nodes in Javascript

    如果您非常担心内存泄漏并关心您的技术文盲 IE 用户,您应该阅读以下内容:Understanding and Solving Internet Explorer Leak Patterns

    【讨论】:

      【解决方案2】:

      嗯,这不是 100% 的结论,但我做了一个快速的 JSFiddle 来试验这个。这是一个紧密的循环,运行您的代码超过 100000000 次。使用 Chrome 任务管理器时,内存使用量从 47.9MB 跃升至 130MB,并保持相当稳定,直到完成后降至 60MB 左右。

      http://jsfiddle.net/u7yPM/

      这表明 DOM 节点肯定被垃圾回收了,否则在整个测试运行期间内存使用量将继续增加。

      编辑:我在 Chrome 14 上运行了这个。

      【讨论】:

      • 谢谢本。感谢您的帮助。
      猜你喜欢
      • 2012-04-09
      • 1970-01-01
      • 2019-08-05
      • 2013-01-26
      • 2011-07-24
      • 2012-03-24
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多