V8 内存和垃圾回收

V8 的内存默认设置为:
 32 位: 0.7GB 左右
64 位: 1.4GB左右
使用 --max_old_space_size + 数字 设置老生代内存 单位 MB
--max_new_space_size + 数字 设置新生代内存单位 KB
多使用Buffer, Buffer 是在C++ 层面上实现的不会占用V8 分配的内存 或者 使用多个Node 进程。
V8 的垃圾回收:
V8 的内存分为两部分, 分别为新生代和老生代, 两部分的垃圾回收算法不同。

  1. 新生代的垃圾回收 Scavenge 算法
    1.将新生代分为相等的两个部分,一个处于使用状态称为 from 空间, 一个处于闲置状态称为 to 空间
    2.分配对象时使用 from 空间
    3.将 from 空间的存活对象 复制到 to空间中, 如果from 空间内的对象经过多次复制依然存活或者 to空间的使用率达到 25%, 将其复制到老生代空间中去。
    4.清空 from 空间, 并将from 空间 与 to空间 角色进行对换
  2. 老生代的垃圾回收
    1.Mark - Sweep 进行标记清除, 即标记活着的对象, 然后清除未标记的对象即不使用的对象。会造成内存不连续的状态
    2.Mark - Compact 进行标记整理, 标记活着的对象, 然后将活着的对象往一端移动,移动完成后清理掉边界外的内存。耗时较长
    3.以上两种算法是结合使用的。
  3. 增量标记的形式
    v8 在进行垃圾回收时会将应用逻辑暂停下来,为了降低全堆垃圾回收时的时间, 从标记阶段开始, 将原来要进行的步骤拆为许多步分别进行, 每次回收一点垃圾内存, 然后让逻辑运行, 以此类推。

参考链接:
http://segmentfault.com/a/1190000000440270
http://newhtml.net/category/v8%E4%B8%93%E9%A2%98/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容