1. V8是什么
V8是一款主流的 JavaScript 执行引擎
特点
运行速度快 因为采用了即时编译
V8内存设限 64位 1.5G 32位 不超过 800M
2. V8 中常用的 GC 算法
分代回收
空间复制
标记清除(上一篇有写过)
标记整理(上一篇有写过)
标记增量(上一篇有写过)
3. V8 垃圾回收策略
V8中采用的是分代回收思想
内存分为 新生代 和 老生代
针对不同的对象采用不同的算法
4. V8 中内存分配
4.1. V8内存一分为二
4.1.1 小空间用于存储新生代对象 (64位 32M | 32位 16M)
-
新生代对象指哪些?
- 新生代对象一般是指 声明周期比较短的对象 比如一些局部变量等等
-
新生代对象回收实现过程
1. 新生代对象进行回收实现是用 复制算法 和 标记清除 2. 新生代内存区分为两个等空间大小 3. 使用空间为 From 空闲空间为 To 4. 活动空间存储于 From 空间 5. 标记整理后 将活动对象拷贝到 To 6. From 和 To 交互空间 完成释放
-
回收细节
1. 拷贝过程中可能出现晋升 (晋升就是将新生代移动到老生代)
2. 一轮GC后还存活的新生代 就晋升为老生代
3. To 空间使用率超过 25%
4.1.2 老生代对象 (64位 1.2G | 32位 700M)
- 老生代对象指哪些?
- 老生代对象就是存活时间比较长的对象 老生代对象存放在右侧老生代区域
- 老生代对象回收实现
1. 主要采用标记清除 标记整理 增量标记算法
2. 首先使用标记清除完成垃圾空间的回收
3. 使用标记整理进行空间优化
4. 采用增量标记进行效率优化
4.1.3 新生代和老生代细节对比
1. 新生代区域垃圾回收使用空间换时间
2.老生代区域垃圾回收不适合复制算法