8

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

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

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

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

4 回答 4

7

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

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

于 2012-05-07T19:41:23.227 回答
4

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

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

于 2012-05-07T19:35:40.060 回答
4

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

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

参考: 这里。

于 2012-05-07T19:45:14.240 回答
1

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

于 2012-05-07T19:52:52.457 回答