-------学习记录------
1、认识V8
(1)V8是一款主流的JavaScript执行引擎;
(2)V8采用即时编译
(3)V8内存设置上限
2、V8垃圾回收策略
(1)采用分代回收的思想实现垃圾回收
(2)内存分为新生代、老生代
(3)针对不同对象采用不同算法
(4)V8垃圾回收常见的GC算法
3、V8垃圾回收策略流程
V8内存空间---->新生代对象存储---->采用具体的GC算法
V8内存空间---->老生代对象存储---->采用具体的算法
4、V8常用GC算法
分代回收
空间复制
标记清除
标记整理
标记增量
5、V8内存分配
V8内存空间一分为二
小空间用于存储新生代对象(64位系统中有32M,32位系统中有16M)
新生代对象指的是存活时间较短的对象(例如:局部变量)
6、新生代对象回收实现
回收过程采用复制算法+标记整理
(1)新生代内存区分为二个等大小空间
(2)使用空间为Form,空闲空间为To
(3)活动对象存储于From空间
(4)标记整理后将活动对象拷贝至To
(5)From与To交换空间完成释放
7、回收细节说明
(1)拷贝过程中可能出现晋升
(2)晋升就是将新生代对象移动至老生代
(3)一轮GC还存活的新生代需要晋升
(4)To空间的使用率超过25%
8、老生代对象说明
(1)老生代对象存放在右侧老生代区域
(2)64位操作系统1.4G,32位操作系统700M
(3)老生代对象是指存活时间较长的对象(例如:全局变量、有些闭包)
9、老生代对象回收实现
(1)主要采用标记清除、标记整理、增量标记算法
(2)首先使用标记清除完成垃圾空间的回收
(3)采用标记整理进行空间优化
(4)采用增量标记进行效率优化
9、细节对比
(1)新生代区域垃圾回收使用空间换时间;
(2)老生代区域垃圾回收不适合复制算法
10、标记增量如何优化垃圾回收
垃圾回收:程序执行----->遍历对象进行标记---->执行------>标记---->执行----->标记----->执行----->完成清除------>执行

浙公网安备 33010602011771号