V8脚本引擎
垃圾回收机制
1.scavenge
scavenge主要采用了cheney算法。
cheney算法采用复制的方式实现。主要用于新生代内存(由于新生代内存生命周期短)。
优点:时间效率高,空间换取时间。
过程:将内存分为一分为二,两部分semispace,分别为 From和To。垃圾回收时,检查From内存中存活的对象复制到To中,释放From空间,并将From和To角色调换。复制条件,如果对象被复制多次晋升到oldspace,如果超过25%,同样晋升。
2.Mark-sweep
由于老生代对象存活时间都比较长,使用scavenger效率低。mark-sweep 采用遍历标记存活对象,然后清理没有标记的对象。
缺点:清理之后,内存容易碎片化,影响再次分配。
3.Mark-Compact
相比于Mark-sweep,标记之后,将存活对象移动到一块,然后清理。
缺点:执行效率慢。
优先采用Mark-sweep,空间不足采用mark-compact
V8为了减少一次全停顿时间,采用增量和延迟清理技术,将清理和整理过程分小步进行。