本博客内容整理自朴灵老师的《深入浅出Node.js》第五章内存控制。
V8的内存限制
64位操作系统约为1.4G,32位操作系统约为0.7G。
–max-old-space-size和–max-new-space-size可以调整限制内存的大小
V8的对象分配。
所有的Javascript对象都是通过堆来进行分配的.
V8的垃圾回收机制
-
垃圾回收算法
-
V8的内存分代。将内存分为新生代和老生代。新时代中的对象为存活时间较短的对象,老生代中的对象为存活时间较长或常驻内存的对象。
-
Scavenge算法。新时代中的对象主要采用Scavenge算法进行垃圾回收。
-
Mark-Sweep & Mark-Compact。用于老生代中的垃圾回收。Mark-Sweep是标记清除的意思,标记活的对象,清除没有标记的对象。回收后会造成内存碎片。因此有了Mark-Compact(标记整理)。将活着的对象往一边移动,完成后清除边界外的内存。
-
Incremental Marking(增量标记)。目的为了减少垃圾回收最大停顿时间。
堆外内存。
不是通过V8分配的内存成为堆外内存,没有1.4G或者0.7G的限制。如Buffer。
内存泄漏。
慎将内存当缓存,可用Redis。
内存泄漏排查
《深入浅出Node.js》5.5.1节有详细描述
排查工具:
- node-heapdump
- node-memwatch
附上资源 《深入浅出Node.js》PDF
链接: https://pan.baidu.com/s/1KbZzryRAtJLuz33qh4TTgw 提取码: w1c5