浅谈 V8 的垃圾回收草稿
# 前言
写下文本的灵感是阅读了这篇文章 - 看完这篇垃圾回收,和面试官扯皮没问题了 (opens new window)
该文通俗易懂,详略得当,虽然讲的是 java 的垃圾回收机制,但同样适合于 v8
本文会先介绍 V8 的内存模型,采用的分代回收算法,最后简单模拟垃圾回收整个过程
# V8 的内存限制
如何查看,如何调整,源码中的定义
堆内存相关代码都在 v8/src/heap 目录中 (opens new window)
node 版本
chrome 浏览器
源码中的定义?
https://github.com/v8/v8/tree/master/src/heap
https://github.com/v8/v8/blob/4b9b23521e6fd42373ebbcb20ebe03bf445494f9/src/heap/heap-controller.h#L59
# 内存结构
栈内存,堆内存。。
# 垃圾回收
1:2
8:1:1
# 新生代
标记复制,生命周期较短,需要保存的对象数量较少
# 老生代
采用标记清除,当空间不足时采用标记整理
# 大对象
# GC 时机
增量标记,将 full gc 分割为多个阶段,中间允许穿插 js 任务
# 模拟实现
我们利用 js 数组来模拟堆内存,且规定值仅为 bool 值(取值为 true 表示该位置的 1 字节内存被使用)
# 拓展阅读
- 看完这篇垃圾回收,和面试官扯皮没问题了 (opens new window)
- 《深入浅出 Node.js》
- V8内存管理 (opens new window)
编辑 (opens new window)
上次更新: 2023/08/23, 09:32:05