2016-02-12 33 views
1

我有它通過一個網站的圖標循環的方法:下面的setTimeout JavaScript代碼是否泄漏?

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:

Increasing heap memory

這是可能的測量的時間間隔不足以讓GC進入,但我有疑問。提前致謝!

+2

看起來好像不是泄漏(可能是錯誤的),只需手動運行一個GC來檢查它。 –

+0

也許值得注意的是,一旦'tabInFocus'是一次僞造的,定時器循環將永遠不會重新啓動(禁止未顯示的重新啓動它)。 –

+1

@ X.L.Ant感謝所有的評論。我沒有意識到你可以在時間線記錄期間強制GC。內存下降到基地,所以它看起來像一切正常 –

回答

1

你沒有展示GetBoolean中的內容,但假設它沒有做它不應該做的事情,不,在代碼中沒有內存泄漏。你只是沒有運行足夠長的時間來做GC。 (Chrome的工具也讓你強制GC)

請記住,垃圾收集的環境中的一個重要方面是環境會做垃圾回收的,需要的時候,而不是通常前。

+0

對不起,這是一個疏忽,並感謝您的建議 –