JavaScript 执行引擎 V8

88 阅读2分钟

1. V8是什么

V8是一款主流的 JavaScript 执行引擎

特点  
    运行速度快 因为采用了即时编译
    V8内存设限  64位 1.5G  32位 不超过 800M

2. V8 中常用的 GC 算法

分代回收
空间复制
标记清除(上一篇有写过)
标记整理(上一篇有写过)
标记增量(上一篇有写过)

3. V8 垃圾回收策略

V8中采用的是分代回收思想 
    内存分为 新生代 和 老生代
    针对不同的对象采用不同的算法
    

4. V8 中内存分配

4.1. V8内存一分为二

4.1.1 小空间用于存储新生代对象 (64位 32M | 32位 16M)

  • 新生代对象指哪些?

    • 新生代对象一般是指 声明周期比较短的对象 比如一些局部变量等等
  • 新生代对象回收实现过程

    1. 新生代对象进行回收实现是用 复制算法 和 标记清除
    
    2. 新生代内存区分为两个等空间大小
    
    3. 使用空间为 From 空闲空间为 To
    
    4. 活动空间存储于 From 空间
    
    5. 标记整理后 将活动对象拷贝到 To
    
    6. FromTo 交互空间 完成释放
    
  • 回收细节

1. 拷贝过程中可能出现晋升 (晋升就是将新生代移动到老生代)

2. 一轮GC后还存活的新生代 就晋升为老生代

3. To 空间使用率超过 25% 

4.1.2 老生代对象 (64位 1.2G | 32位 700M)

  • 老生代对象指哪些?
    •  老生代对象就是存活时间比较长的对象 老生代对象存放在右侧老生代区域 
  • 老生代对象回收实现
1. 主要采用标记清除 标记整理  增量标记算法

2. 首先使用标记清除完成垃圾空间的回收

3. 使用标记整理进行空间优化

4. 采用增量标记进行效率优化

4.1.3 新生代和老生代细节对比

1. 新生代区域垃圾回收使用空间换时间

2.老生代区域垃圾回收不适合复制算法