【问题标题】:Is setInterval handler considered a memory leak?setInterval 处理程序是否被视为内存泄漏?
【发布时间】:2014-01-23 19:08:33
【问题描述】:

javascript代码:

function blah()
{
    var blahInterval = setInterval(function(){ 
        if( some_global_variable == 5 )
            clearInterval(blahInterval);
    }, 1000);
}

我的这段代码有多种变体,在 NodeJS 脚本中将被调用无数次。我应该在clearInterval 之后delete blahInterval; 吗?

这是内存泄漏吗?或者一旦 setInerval 函数超出范围,GC 会清理它?

【问题讨论】:

    标签: javascript node.js memory-leaks


    【解决方案1】:

    GC 应该在它超出范围时清理它。只要if条件为假就可以清除区间。我不会认为这是内存泄漏。

    【讨论】:

    • 全局变量被一些外部事件改变了,所以这个 setInterval 处理程序可能会被执行一次或一百次!所以问题是“blahInterval 什么时候超出范围?”
    • 每个blah()的函数调用都会创建一个本地blahInterval。因此,考虑到 if 语句相同,每个语句都会在同一时间超出范围。如果blahInterval 是一个全局变量,我们就会遇到问题,因为当它被覆盖时会有无法清除的间隔。因为它是本地的,所以我们没有这个问题。
    猜你喜欢
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2016-09-01
    • 2020-07-15
    • 2019-03-09
    • 1970-01-01
    相关资源
    最近更新 更多