-------学习记录------

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、标记增量如何优化垃圾回收

垃圾回收:程序执行----->遍历对象进行标记---->执行------>标记---->执行----->标记----->执行----->完成清除------>执行

posted on 2021-02-02 19:35  phantom_yy  阅读(198)  评论(0)    收藏  举报