V8简介
- 一款主流的JS执行引擎
- 采用即时编译(JIT)
- 内存设限(64位1.5GB,32位700MB)
分代回收思想
- V8将内存一份为二(From区域To区域)
- 小空间用来存储新生代对象(32MB|16MB)
- 新生代指的是存活时间较短的对象
- 老生代就是指存活时间较长的对象
新生代的回收实现
- 回收过程采用复制算法+标记整理
- 新生代分为两个等大的区域
- 使用空间为From,空闲空间为To
- 活动对象存储在from中
- 标记整理后将对象拷贝至to空间中
- form与to空间进行交换完成空间的释放
老生代的回收实现
- 首先采用标记清除法完成垃圾空间的回收
- 采用标记整理进行空间的优化
- 采用增量标记进行效率优化
tip
增量标记法为什么能优化效率?
因为增量标记算法
是将一整个的垃圾回收分为多个小的垃圾回收,这样就会使垃圾回收与程序的执行进行交替的工作,这样可以使时间上的消耗及程序停顿的时间更加的合理一些。
二者对比
- 新生代区域的回收主要使用空间换时间(目的更快)
- 老生代区域回收不适合复制算法(占用空间)
常用性能分析工具
- 浏览器任务管理器(shift+esc)
- Performance
- Timeline
- Snapshot
网友评论