【问题标题】:Is the below setTimeout JavaScript code leaking?下面的 setTimeout JavaScript 代码是否泄漏?
【发布时间】:2016-02-12 08:06:31
【问题描述】:

我有一个循环浏览网站图标的方法:

function LoopFavIcon(isRed){
 if(!tabInFocus)
 {
    isRed = GetBoolean(isRed, false);

    if(isRed)
    {
        $($('head link')[0]).attr("href", "favicon.ico");
    }
    else
    {
        $($('head link')[0]).attr("href", "favicon_red.ico");
    }
    setTimeout(function f83(){
        LoopFavIcon(!isRed)
    }, 700);
 }}

内存时间线似乎增加了内存,没有发生 GC:

测量的时间间隔可能不足以让 GC 启动,但我对此表示怀疑。提前致谢!

【问题讨论】:

  • 看起来没有泄漏(虽然可能是错误的),只需手动运行 GC 进行检查。
  • 也许值得注意的是,一旦tabInFocus 是假的,计时器循环将永远不会重新启动(除非重新启动它没有显示)。
  • @X.L.Ant 感谢所有 cmets。我没有意识到您可以在时间线记录期间强制 GC。内存掉到了base,所以看起来一切正常

标签: javascript memory-leaks garbage-collection


【解决方案1】:

您尚未显示 GetBoolean 中的内容,但假设它没有做不应该做的事情,不,该代码中没有内存泄漏。您只是没有运行足够长的时间来进行 GC。 (Chrome 的工具也可以让你强制 GC。)

请记住,垃圾收集环境的关键方面之一是环境将在需要时进行垃圾收集,而不是通常之前。

【讨论】:

  • 抱歉,这是疏忽,感谢您的建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
  • 2018-08-17
  • 2014-06-07
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多