【问题标题】:How are anonymous objects garbage collected in Javascript?Javascript 中如何收集匿名对象垃圾?
【发布时间】:2012-05-07 19:33:13
【问题描述】:

如果我创建一个对象而不将其分配给任何东西,Javascript 垃圾何时会收集该对象?这是一个例子:

alert(new Date().getTime());

如果不做这样的垃圾回收,会不会导致内存泄漏?

for (var i = 0; i < 99999999; i++) {
    console.info(new Date().getTime());
}

【问题讨论】:

  • 您的问题的直接答案(“对象在不再被引用后的某个时间被收集”和“不,它不会导致泄漏”)可能不是您真正想要的。你真正想知道什么?
  • @AshBurlaczenko 和 Phrogz ——我不认为问这种事情有什么问题。如果您正在尝试优化某些代码,也许是为了减少内存使用,这是一件非常好的事情,并且不必与特定问题相关联。

标签: javascript memory-management garbage-collection


【解决方案1】:

如果范围内没有人引用匿名对象,他们将在下次 GC 运行时进行垃圾回收。

因此,在 Console.info 完成运行后,它们就可以进行垃圾收集了。如果您设置任何范围内的变量来引用它们,那么它们不会。

【讨论】:

    【解决方案2】:

    垃圾回收的美妙之处在于您知道内存何时会被回收,您也不应该关心(除非它发生得太频繁)。

    在这种情况下,运行时最终应该回收那些Date 实例,但您所做的任何事情都不会真正改变它执行此操作的速度。此外,这不会导致内存泄漏。

    【讨论】:

      【解决方案3】:

      JavaScript 会自动运行 GC(垃圾收集器)以回收不再使用的字符串、对象、数组和函数所占用的内存。

      垃圾收集的一个关键特性是垃圾收集器必须 能够确定何时可以安全地回收内存。显然,它 绝不能回收仍在使用并应收集的值 只有不再可达的值;也就是说,不能 通过任何变量、对象属性或 程序中的数组元素。

      参考:Here.

      【讨论】:

        【解决方案4】:

        这是关于 JS garbare 收集的一个很好的参考:http://www.scirra.com/blog/76/how-to-write-low-garbage-real-time-javascript

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-11
          • 1970-01-01
          • 2010-11-08
          • 2012-10-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多