《深入浅出Node.js》学习笔记:内存控制

V8虚拟机

Node使用V8做JavaScript脚本引擎

V8的内存限制

64位系统下最大能使用内存为1.4GB,32位系统下最大能使用内存为0.7GB

1
2
// 这个语句可以耗尽V8的内存,导致报错:JavaScript heap out of memory
var name =[];for(var i=0;i<100000000000000000;i++) {name[i] = i}

V8限制堆的大小的原因:V8的垃圾回收机制的限制。(一个1.5GB的垃圾回收堆内存,V8做一次小的垃圾回收需要15ms以上,做一次非增量式的垃圾回收甚至需要1s以上)

通过设置–max-old-space-size或–max-new-space-size来调整内存限制的大小

1
2
node --max-old-space-size=1700 test.js // 单位为MB
node --max-new-space-size=1024 test.js // 单位为KB

V8的对象分配

在V8中,所有的JavaScript对象都是通过堆来进行分配的

1
2
3
4
5
6
7
8
// 查看V8内存使用情况
process.memoryUsage()
// 输出结果
{
rss: 14958592,
heapTotal: 7195904, // 已申请到的内存
heapUsed: 2821496 // 当前使用的内存
}

高效使用内存

内存指标

内存泄漏

内存泄漏排查

大内存应用