Gre*_*een 5 javascript memory garbage-collection memory-management node.js
我尝试在nodejs(0.10.35)中分析内存使用情况,我在下面创建了2个文件并使用node -expose-gc运行
var a和var b初始化为空字符串
运行for循环使a和b更大
setInterval每1秒打印一次内存使用情况
x >> 20运算符相当于Math.floor(x/1024/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;}
Run Code Online (Sandbox Code Playgroud)
我从控制台得到了结果
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
Run Code Online (Sandbox Code Playgroud)
我的问题是:
在第二次垃圾收集后,内存降至<20 MB,如预期的那样.我在这看错了吗?
小智 0
你有两个牙套
var i = 10000000; for (;i;i--) {a += i; b += i;}}//<-----here
Run Code Online (Sandbox Code Playgroud)
也许这就是函数行为异常的原因。