如果我创建一个对象而不将其分配给任何东西,Javascript什么时候会垃圾收集这个对象?这是一个例子:
alert(new Date().getTime());
如果没有完成这样的垃圾收集,会导致内存泄漏吗?
for (var i = 0; i < 99999999; i++) {
console.info(new Date().getTime());
}
答案 0 :(得分:7)
如果范围内没有人引用匿名对象,则下次GC运行时会收集垃圾。
因此,在Console.info完成运行后,他们正在进行垃圾收集。如果您设置任何范围内变量来引用它们,那么它们就不会。
答案 1 :(得分:4)
垃圾收集的美妙之处在于你不知道何时回收内存,你也不应该关心(除非它发生得太频繁)。
在这种情况下,运行时最终应该回收那些Date
个实例,但是你所做的一切都不会改变它的速度。此外,这不会导致内存泄漏。
答案 2 :(得分:4)
JavaScript自动运行GC(垃圾收集器)以回收不再使用的字符串,对象,数组和函数所占用的内存。
垃圾收集的一个关键特性是垃圾收集器必须 能够确定何时回收内存是安全的。显然,它 绝不能回收仍在使用并应收集的价值 只有不再可达的值;也就是说,不能的价值观 通过任何变量,对象属性或 程序中的数组元素。
参考: Here.
答案 3 :(得分:1)
这是关于JS garbare集合的一个很好的参考:http://www.scirra.com/blog/76/how-to-write-low-garbage-real-time-javascript