v8工作机制及垃圾回收策略

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

你可能感兴趣的:(v8工作机制及垃圾回收策略)