5

のために私は(0.10.35)nodejsでメモリ使用量をプロファイリングしてみてください、私は--expose-GCJavascriptのメモリ使用量ループ

VAR aとするvar bは空のように初期化されている下の2つのファイルを作成したノードで実行ループの文字列

A 20、オペレータがMath.floor(X/1024 /に相当し>>及びBより大きい

のsetIntervalは、1秒ごと

Xメモリ使用量を出力するために実行されます1024)を使用して結果をMB

//file 1.js 

var a = '', b = '', n = 0; 
var i = 10000000; for (;i;i--) {a += i; b += i;}} 

setInterval(function(){ 
    var m = process.memoryUsage(); 
    console.log(++n,m.rss>>20,m.heapTotal>>20,m.heapUsed>>20); 
},1000); 

setTimeout(function(){ 
    global.gc(); 
    console.log('1st garbage collect'); 
},2500); 

setTimeout(function(){ 
    a = null; 
    console.log('var a cleared'); 
},5000); 

setTimeout(function(){ 
    global.gc(); 
    console.log('2nd garbage collect'); 
},7500); 

//file 2.js is similar to file 1 except that var a and var b are changed at separate loops 
var i = 10000000; for (;i;i--) {a += i;} 
var i = 10000000; for (;i;i--) {b += i;} 

私は私の質問があり、コンソール

 1.js     2.js 
1 1098 1073 1069  1407 1378 1375 
2 1098 1073 1069  1407 1378 1375 
    1st garbage collect 
3 1098 1073 1069  715 696 688 
4 1098 1073 1069  715 696 688 
    var a cleared 
5 1098 1073 1069  715 696 688 
6 1098 1073 1069  715 696 688 
7 1098 1073 1069  715 696 688 
    2nd garbage collect 
8 19 11 1   20 12 1 

からの結果を得た:

  1. a.lengthとのb.lengthだけ〜65メガバイト、なぜメモリ使用量〜千メガバイトですファイル1.js〜〜1400MB(ファイル2.js)
  2. 1回目のガベージコレクション後、var bは収集されませんが、メモリ使用量がファイル1.jsよりも> 1000MBですが〜ファイル2.jsで700 MB?

2回目のガベージコレクション後、期待どおりメモリが<に低下します。私はここで何か間違ったことを見ていますか?

答えて

0

は、次の2つのブレース

var i = 10000000; for (;i;i--) {a += i; b += i;}}//<-----here 

関数が不正な動作をしている理由かもしれないことだ

を持っています。

+0

申し訳ありませんが、それはタイプミスで、質問を再編集できませんでした。 – Green