关于javascript垃圾收集器计时器的任何想法? 假设我在脚本下面运行,函数和相关的范围链变量将会运行 在100ms后准确收集垃圾?或者一些保证金?
我在stackoverflow中读了一个关于垃圾收集的线程,我还有这个问题。 以下是我的问题?
如果不是,它是基于EVENT吗?,意味着如果引用不再存在,垃圾 收集器将立即回收内存。
function call_me() {
//calculate elapsed_time - code not given
if(elapsed_time <100)
{
setTimeout(call_me,25);
}
else{
final_call();
}
}
call_me();
答案 0 :(得分:7)
每个用户代理都以不同方式实现垃圾收集。所有用户代理都会定期重复使用mark-and-sweep方法,因此没有“立即”的方法;它会在它发生时发生。
每个代理都有不同的阈值和机制来确定GC何时通过。它不一定是事件驱动的(也许你可能会说它是基准驱动的,事件发起的),当然也不是基于计时器。
超出范围的功能立即符合条件用于垃圾收集,但实际上并不知道何时会发生。
从开发人员的角度来看,这实际上是您不打算考虑的事情。没有任何方法可以停止或启动GC,或者根本没有任何迹象表明它已经发生。在Firefox中查看about:memory
以获得一些有趣的琐事(并且那里有几个可疑的按钮来“控制”GC)。这就是你所能得到的所有内容,并且这些数据不适用于脚本。
答案 1 :(得分:3)
垃圾收集器是不确定的 垃圾在变成垃圾后会被收集一段时间。
传递给setTimeout
的闭包对象在执行后将变为垃圾。
除此之外的任何事情都是特定于实现的。