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
からの結果を得た:
- a.lengthとのb.lengthだけ〜65メガバイト、なぜメモリ使用量〜千メガバイトですファイル1.js〜〜1400MB(ファイル2.js)
- 1回目のガベージコレクション後、var bは収集されませんが、メモリ使用量がファイル1.jsよりも> 1000MBですが〜ファイル2.jsで700 MB?
2回目のガベージコレクション後、期待どおりメモリが<に低下します。私はここで何か間違ったことを見ていますか?
申し訳ありませんが、それはタイプミスで、質問を再編集できませんでした。 – Green