考虑下面的JavaScript代码。我正在创建数组,让我们说4个元素,然后立即删除对它的引用。垃圾收集何时发生?我知道它是特定于语言实现的,但我们没有那么多JavaScript引擎。
编辑:这是最简单的情况,但它让我感兴趣,因为垃圾收集会在某些网络音频应用程序中引起可听见的故障。
var a = [1, 2, 3, 4];
a = null;
// other code
更新 Javascript and Garbage collection不解释事件的顺序及其触发方式。我不想控制垃圾收集。我需要更好的理解来设计更好的代码。
答案 0 :(得分:1)
删除不再使用的对象的引用是一种很好的方法。许多(几乎所有)javascript引擎都使用 Mark and Sweep 方法。如果要删除对象的引用并且没有其他引用,则可能会在下一个标记和扫描周期中收集它。
垃圾收集是一种循环方法,在少数引擎中定期发生。一些引擎表示他们以有效的方式进行GC,但是没有有效的文档可用。
答案 1 :(得分:1)
可以通过多种方式触发GC
我可能还有其他原因可以想到。它通常不是你应该关注的事情。
如果您想保持GC较低,则需要保持较低的对象分配率。例如。某些算法可以从预先分配的缓冲区中受益,它们可以在其上执行工作。该策略的有效性取决于javascript运行时是否具有转义分析以及它首先避免短期分配的有效性。关于收藏家是否是世代的。世代收藏家因快速,短暂的分配而受到的影响要小得多。