for 循环中的 JavaScript 内存使用情况
Javascript memory usage in for loop
我尝试在nodejs(0.10.35)中分析内存使用情况,我在下面创建了2个文件并使用node运行--expose-gc
var a 和 var b 初始化为空字符串
运行 A 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;}
我从控制台获得结果
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 MB,为什么文件 1 中的内存使用 ~1000 MB.js文件2中的内存使用 ~1400 MB.js
- 在第一次垃圾回收之后,是否会收集 var b,但看起来文件 1000 的内存使用量仍然> 1000 MB.js,但在文件 700 中为 2.js MB?
第二次垃圾回收后,内存将下降到<20 MB,正如预期的那样。我在这里看错了吗?
你有两个大括号
var i = 10000000; for (;i;i--) {a += i; b += i;}}//<-----here
也许这就是功能行为不端的原因。
相关文章:
- 在Widget代码中没有jQuery的情况下,用光标图像从左滑动到右
- 对于如何在没有modernizr的情况下用边界半径的功能检测检查来替换我的旧浏览器检查
- 如何在不使用插件的情况下用程序记录浏览器操作
- MIDI Javascript:如何在没有库的情况下用Javascript生成单个MIDI音符
- 你为什么要用!!在这种情况下的表达式中?AngularJS API.
- Javascript;Fabric-js:在这种情况下,如何在函数外调用对象
- 如何在没有jQuery的情况下用JavaScript打开JSON文件
- 用javascript计算内存使用情况
- 在没有一个表单的情况下用ENTER阻止提交
- 在不使用jQuery的情况下,用JavaScript将表转换为数组
- 如何在没有空函数的情况下用javascript实现对象组合
- 如何在没有for循环的情况下用JavaScript显示数组
- 如何在不使用JSON.stringify或JSON.parse的情况下用javascript克隆数组
- 在没有赋值的情况下用var在JavaScript中声明变量会消耗内存吗
- 如何在不刷新的情况下用javascript打开或关闭掩码/隐藏URL参数
- 在不影响其他元素的情况下,用Vue.js切换一个元素的类开/关最简单的方法是什么?
- 用2种情况找到一些变量的正确方法
- 如何在不影响其他模态的情况下用CSS改变模态的宽度?
- 为什么变量在一种情况下用单引号发送,而在另一种情况下不加引号
- 在Jquery's .unload已弃用的情况下,取消提交按钮文本设置的正确方法