美文网首页
V8 堆内存

V8 堆内存

作者: LeonLi_9ea5 | 来源:发表于2019-06-24 14:58 被阅读0次

    一张图看懂 V8 堆内存

    V8_heap.png

    要点

    1. V8 中大部分对象都是直接在堆上创建的

    2. V8 将堆划分出几个不同的空间,概括为两大类: 新生代和老生代

      • 新生代的大小约为 1~20MB

      • 新生代中的对象频繁诞生和死亡

      • 新生代采用 Scavenge 算法回收,老生代中采用 Mark-Sweep-Compact 回收

    3. 所有的空间都分页,页的大小通常为 1MB ,页在 V8 和操作系统之间的转移由 Memory Allocator 管理

      • 新生代的内存页是连接的

      • 老生代的内存页是分散的,以链表形式串联

    4. 新生代分为两个 semispace,每次只使用其中之一,在 GC (Garbage Collection)时从根对象开始做 BFS(Breadth-First-Search),将存活的对象转移到另一半中,存活 2 次以上的晋升至老生代 (old space),随后另一半空间释放。

    5. 除堆上的内存外,V8 还允许用户自行管理对象的内存,如 Nodejs 中的 Buffer。这些外部内存由外部代码维护并通过 API 上报大小给 V8,在 GC 时会被 V8 跳过。当然也可以向 V8 注册 GC 回调来回收这些内存。

    相关文章

      网友评论

          本文标题:V8 堆内存

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