一、内存查看
console.log(
'\n node分配到的总内存 rss: ' + mem.rss,
'\n 堆内存 heapTotal: ' + mem.heapTotal,
'\n 已使用的内存 heapUsed: ' + mem.heapUsed,
'\n node中额外申请到的c++内存: ' + mem.external,
'\n 操作系统总内存: ' + os.totalmem(),
'\n 操作系统空闲内存: ' + os.freemem()
)
注意单位都是字节。
二、内存分配
V8 会将系统分配给它的内存分为新生代内存和老生代内存,新生代内存用于存放存活时间较短的对象,所以这里的内存会被 gc 频繁的回收。而老生代内存用于存放存活时间久的对象,二者的垃圾回收策略也各不相同。
三、新生代
新生代将内存一分为二,一块处于使用中(From),一块处于闲置中(To)。gc 的过程大致如下
- 新对象首先进入 From
- gc 时,将 From 中存活的对象复制到 To 中,并给这些变量加个标记,表示它已经经历过一次 gc 了,而且存活下来了(现在 To 空间中的变量都是需要保留下来的)
- 清除 From 空间
- 将 From 和 To 空间互换,那么