一、nodejs查看内容使用情况:
process.memoryUsage()
单位为 Btye
转化函数:
var format = function(bytes) { return (bytes/1024/1024).toFixed(2)+'MB'; };
heapTotal
和 heapUsed
代表 V8 的内存使用情况。
external
代表 V8 管理的,绑定到 Javascript 的 C++ 对象的内存使用情况。
rss
是驻留集大小, 是给这个进程分配了多少物理内存(占总分配内存的一部分),这些物理内存中包含堆、代码段、以及栈。
对象、字符串、闭包等存于堆内存。 变量存于栈内存,实际的 JavaScript 源代码存于代码段内存。
二、浏览器的查看
window.performance.memory
三、内存的分布
新生代内存,是采用循环回收,即:
从 from 取出 活着 的变量,放入 to , 清空 from 内存,然后 取出 to 里面 活着 的变量,存入 from , 清空 to 内存, 如此交替执行。
老生代内存,当新生代内存占用超过 一定 百分比, 开始存入老生代。
老生代内存是每次标记出活着的变量,删掉死去的, 然后整理内存,将碎片合并。
四、内存的使用
1、尽量不声明全局变量
2、声明了全局变量,当不再使用的时候,置为 undefined 或者 null
五、误区
闭包会造成内存泄漏
实际上,这是 javascript 权威指南,对 ie5 的一种说法,在 v8 里面是不存在的,包括目前的新浏览器,都不存在。
具体的,可以自己用上面获取内存的办法,去比对。闭包对内存发现基本没有影响。