V8 的内存默认设置为:
32 位: 0.7GB 左右
64 位: 1.4GB左右
使用 --max_old_space_size + 数字 设置老生代内存 单位 MB
--max_new_space_size + 数字 设置新生代内存单位 KB
多使用Buffer, Buffer 是在C++ 层面上实现的不会占用V8 分配的内存 或者 使用多个Node 进程。
V8 的垃圾回收:
V8 的内存分为两部分, 分别为新生代和老生代, 两部分的垃圾回收算法不同。
- 新生代的垃圾回收 Scavenge 算法
1.将新生代分为相等的两个部分,一个处于使用状态称为 from 空间, 一个处于闲置状态称为 to 空间
2.分配对象时使用 from 空间
3.将 from 空间的存活对象 复制到 to空间中, 如果from 空间内的对象经过多次复制依然存活或者 to空间的使用率达到 25%, 将其复制到老生代空间中去。
4.清空 from 空间, 并将from 空间 与 to空间 角色进行对换 - 老生代的垃圾回收
1.Mark - Sweep 进行标记清除, 即标记活着的对象, 然后清除未标记的对象即不使用的对象。会造成内存不连续的状态
2.Mark - Compact 进行标记整理, 标记活着的对象, 然后将活着的对象往一端移动,移动完成后清理掉边界外的内存。耗时较长
3.以上两种算法是结合使用的。 - 增量标记的形式
v8 在进行垃圾回收时会将应用逻辑暂停下来,为了降低全堆垃圾回收时的时间, 从标记阶段开始, 将原来要进行的步骤拆为许多步分别进行, 每次回收一点垃圾内存, 然后让逻辑运行, 以此类推。
参考链接:
http://segmentfault.com/a/1190000000440270
http://newhtml.net/category/v8%E4%B8%93%E9%A2%98/