V8的内存管理机制
一、内存管理模型
Node程序运行中,此进程占用的所有内存称为常驻内存(Resident Set)。
- 常驻内存由以下部分组成:
-
代码区(Code Segment):存放即将执行的代码片段
-
栈(Stack):存放局部变量
-
堆(Heap):存放对象、闭包上下文
-
堆外内存:不通过V8分配,也不受V8管理。Buffer对象的数据就存放于此。
上图中的带斜纹的区域代表暂未使用的内存,新生代(new_space)被划分为了两个部分,其中一部分叫做inactive new space,表示暂未激活的内存区域,另一部分为激活状态
除堆外内存,其余部分均由V8管理。
- 栈(Stack)的分配与回收非常直接,当程序离开某作用域后,其栈指针下移(回退),整个作用域的局部变量都会出栈,内存收回。
- 最复杂的部分是堆(Heap)的管理,V8使用垃圾回收机制进行堆的内存管理,也是开发中可能造成内存泄漏的部分,是程序员的关注点。
通过 process.memoryUsage()
可以查看此Node进程的内存使用状况:
// process.memoryUsage()
{
rss: