Javascript - 垃圾收集器计时器?

时间:2011-11-21 18:44:45

标签: javascript browser garbage-collection

关于javascript垃圾收集器计时器的任何想法? 假设我在脚本下面运行,函数和相关的范围链变量将会运行 在100ms后准确收集垃圾?或者一些保证金?

我在stackoverflow中读了一个关于垃圾收集的线程,我还有这个问题。 以下是我的问题?

  1. 是否有任何SYSTEM TIMER运行垃圾收集任务?
  2. 如果不是,它是基于EVENT吗?,意味着如果引用不再存在,垃圾 收集器将立即回收内存。

    function call_me() {
    //calculate elapsed_time - code not given
    
               if(elapsed_time <100)
               {
                setTimeout(call_me,25);
               }
              else{
               final_call();
              }
    }
    
    call_me();
    

2 个答案:

答案 0 :(得分:7)

每个用户代理都以不同方式实现垃圾收集。所有用户代理都会定期重复使用mark-and-sweep方法,因此没有“立即”的方法;它会在它发生时发生。

每个代理都有不同的阈值和机制来确定GC何时通过。它不一定是事件驱动的(也许你可能会说它是基准驱动的,事件发起的),当然也不是基于计时器。

超出范围的功能立即符合条件用于垃圾收集,但实际上并不知道何时会发生。

从开发人员的角度来看,这实际上是您不打算考虑的事情。没有任何方法可以停止或启动GC,或者根本没有任何迹象表明它已经发生。在Firefox中查看about:memory以获得一些有趣的琐事(并且那里有几个可疑的按钮来“控制”GC)。这就是你所能得到的所有内容,并且这些数据不适用于脚本。

答案 1 :(得分:3)

垃圾收集器是不确定的 垃圾在变成垃圾后会被收集一段时间。

传递给setTimeout的闭包对象在执行后将变为垃圾。

除此之外的任何事情都是特定于实现的。