美文网首页
V8内存管理

V8内存管理

作者: JerrySi | 来源:发表于2021-12-16 23:53 被阅读0次

    考虑到浏览器中使用 和 内存回收的效率。 V8限制了内存大小:
    64G:1.5G
    32位:800M

    V8垃圾回收策略

    • 采用分代回收的思想
    • 内存分为新生代和老生代
    • 不同对象采用不同的算法


    V8涉及到的GC算法

    • 分代回收
    • 空间复制
    • 标记清除
    • 标记整理
    • 标记增量

    V8内存分配

    • 空间一分为二
    • 小空间存储新生代对象 (32M | 16M)
    • 新生代是存活时间较短的对象 (局部变量等)
    • 老年代对象存放在右侧区域 (1.4G | 700M)
    • 老年代是存活时间较长的对象(全局变量、block内变量等)

    新生代内存回收

    • 回收过程采用复制算法 + 标记整理
    • 新生代内存区分为二个等大小空间
    • 使用空间是From, 空闲空间是To
    • 活动对象存储于From空间
    • 标记整理后将活动对象拷贝到To
    • From 和 To 交换空间完成释放
    • 拷贝过程中可能出现晋升
    • 晋升就是新生代对象移动到老生代
    • 一轮GC还存活的新生代需要晋升
    • To空间使用率超过25%需要晋升 Why?

    老生代内存回收

    • 标记清除、标记整理、增量标记算法
    • 首先使用标记清除完成垃圾空间回收
    • 采用标记整理进行空间优化
    • 采用增量标记进行效率优化

    当前内存不够To晋升的时候,就会先进行标记整理


    增量标记图示

    新生代 VS 老生代

    • 新生代 空间换时间
    • 老生代 不适合复制算法

    老生代空间大,复制成本很高

    总结

    • 一款主流的JS执行引擎
    • 有内存设置上限
    • 采用分代回收来实现垃圾回收
    • 内存分为新生代 & 老生代
    • 垃圾回收的常见GC算法

    相关文章

      网友评论

          本文标题:V8内存管理

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