美文网首页
V8 内存和垃圾回收

V8 内存和垃圾回收

作者: 逍天辰 | 来源:发表于2015-08-24 11:02 被阅读0次

    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/

    相关文章

      网友评论

          本文标题:V8 内存和垃圾回收

          本文链接:https://www.haomeiwen.com/subject/yajxcttx.html