前言
本篇文章主要是介绍,JavaScript性能优化之V8垃圾回收策略的相关内容
V8垃圾回收策略
1.采用分代回收的思想
2.内存分为新生代和老生代
3.针对不同对象采用不同的算法
V8垃圾回收策略演示图
在上图所示中,内存分为两部分,一个是新生代一个是老生代,两个区域采用不同的GC算法
V8中常用的GC算法
1.分代回收
2.空间复制
3.标记清除
4.标记整理
5.标记增量
V8内存分配
1.V8内存空间一分为二
2.小空间用于存储新生代对象(32M|16M)
3.新生代指的是存活时间较短的对象
新生代对象回收实现
1.回收过程采用复制算法 + 标记整理算法
2.新生代内存区分为二个等大小空间
3.使用空间为from,空闲空间为to
4.活动对象存储于from空间
5.标记整理后将活动空间拷贝至to
6.form和to交换空间完成释放
回收细节说明
1.拷贝过程中可能出现晋升
2.晋升就是将新生代对象移动至老生代
3.一轮GC还存活的新生代需要晋升
4.To空间的使用率超过25%
v8如何回收老生代对象
老生代对象说明
1.老生代对象存放在老生代区域
2.64位操作系统内存最大为1.4G 32位操作系统内存最大为700M
3.老生代对象就是指存活时间较长的对象
老生代对象回收实现
1.主要采用标记清除算法、标记整理算法、增量标记算法
2.首先使用标记清除算法完成垃圾空间的回收
3.采用标记整理算法进行空间优化
4.采用增量标记算法进行效率优化
细节对比
1.新生代区域垃圾回收使用的是空间换时间
2.老生代垃圾回收不适合使用复制算法
增量标记算法如何实现垃圾回收
本质上就是程序执行和GC算法交替执行
谢谢观看,如有不足,敬请指教