1. 介绍
V8
是一款主流的 Javascript
执行引擎
采用即使编译
内存设限(64
位操作系统:1.5 G
32
位:800 M
)
2. V8
垃圾回收策略
采用分代回收的思想
内存分为新生代、老生代
针对不同对象采用不同算法
3. V8
中常用 GC
算法
3.1 分代回收
3.2 空间复制
3.3 标记清除
3.4 标记整理
3.5 标记增量
4. V8
如何回收老生代?
// 老生代对象说明
1. 老生代对象存放在右侧老生代区域
2. 64位操作系统:1.4 G,32位操作系统: 700 M
3. 老生代对象就是指存活时间较长的对象
回收实现 | 细节对比 | |
---|---|---|
新生代 | 1. 回收过程采用复制算法+标记整理算法 2. 新生代分为 from-to 两个等大空间 32M (32 位为 16M )3. 使用空间为 from 内存区,空闲空间为 to 内存区,当 from 空间应用一定大小会触发标记整理4. 当发生标记整理后,复制活动对象到 to 内存区,然后 From 空间进行内存释放。5. 如果拷贝时出现晋升,将新生代活动对象移入老生代 6. 当 To 空间的使用率达到 25% 时,将新生代活动对象移入老生代7. 当一轮 GC 执行完毕后还存活的新生代测需要晋级8. 当一次 GC 操作后,From 和 to 需要进行置换 |
新生代区域垃圾回收使用空间换时间 |
老生代 | 1. 主要采用标记清除、标记整理、增量标记算法 2. 首先使用标记清除完成垃圾空间的回收 3. 采用标记整理进行空间优化 4. 采用增量标记进行效率优化 |
老生代区域垃圾回收不适合复制算法 |
4. 增量标记算法
- 使用时机:会穿插在程序的运行中执行。
- 工作原理: 对象存在直接可达和间接可达,将遍历对象标记,拆分成多个小步骤,先标记直接可达对象。
间接可达的标记与程序执行交替执行,最终完成清除。
网友评论