setIntervalを使用するとコールバック毎にメモリが増えていく


Monacaで空のプロジェクトを作成し、下記のjavascriptを実行しました。

[code]

      setItv();
      function setItv() {
        setInterval(function(){
        }, 5000);
      }
    
[/code]

これをメモリ監視すると、5秒ごとに階段状にいつまでもメモリが積もっていきました。  
MonacaでのsetIntervalの仕様なのでしょうか？  
それともsetIntervalはこのようなものなのでしょうか。

【追記】  
確認環境は Android 4.4.4 (402SH) です。

【補足】  
Monaca以外の環境でも現象を確認しましたので、monacaタグを取り、javascriptととしての質問に変更させていただきます。  
1.5分を過ぎたころからGCが一切動かな‌​くなり、数分ごとにメモリが階段状に増えていきます。

確認環境は、  
Monacaデバッガー + Android 4.4.4 (402SH)  
Monacaでのデバッグビルドapk + Android 4.4.4 (402SH)  
Cordova6.2.0でのビルドapk + Android 4.4.4 (402SH)  
PC(win7) + chrome




> ただ落ちる落ちない‌​は別としても、メモリが溜まっていく原因を明らかにできればと思っています

GCのタイミングは処理系依存ですが、Android(4.4.4)を観察する限り、単純なケースだと下記のどちらかで行なわれる事が多いようです。

  * メモリ使用量が閾値を越える
  * 暇な（イベントの発生などがない）状態が一定時間続く

質問の状況ですと、メモリの使用量は5秒ごとに関数の実行で多少増えていきますが、閾値にはなかなか達しません。  
5秒ごとに`setInterval`がイベントを起しますので、暇になるタイミングもありません。  
よって、メモリ使用量が右肩上りで、GCは行なわれない、という状況になります。

これは`setInterval`に限らず起ります。例えば`click`イベントに何もしない関数をバインドし、5秒おきに外部からクリックしてやる事でも再現します。

また、問題になる事でもありません。放っておけばいずれ上記のGCタイミングの「メモリ使用量が閾値を越える」状況になりますのでGCされます。インターバルを5000msではなく100msくらいにして実験すればすぐに観察出来るはずです。




> ただ落ちる落ちない‌​は別としても、メモリが溜まっていく原因を明らかにできればと思っています

GCのタイミングは処理系依存ですが、Android(4.4.4)を観察する限り、単純なケースだと下記のどちらかで行なわれる事が多いようです。

  * メモリ使用量が閾値を越える
  * 暇な（イベントの発生などがない）状態が一定時間続く

質問の状況ですと、メモリの使用量は5秒ごとに関数の実行で多少増えていきますが、閾値にはなかなか達しません。  
5秒ごとに`setInterval`がイベントを起しますので、暇になるタイミングもありません。  
よって、メモリ使用量が右肩上りで、GCは行なわれない、という状況になります。

これは`setInterval`に限らず起ります。例えば`click`イベントに何もしない関数をバインドし、5秒おきに外部からクリックしてやる事でも再現します。

また、問題になる事でもありません。放っておけばいずれ上記のGCタイミングの「メモリ使用量が閾値を越える」状況になりますのでGCされます。インターバルを5000msではなく100msくらいにして実験すればすぐに観察出来るはずです。

