V8垃圾回收机制

介绍

V8的垃圾回收策略主要是基于分代垃圾回收机制。在垃圾回收演变的过程中,人们发现没有哪一种办法能够满足所有应用场景。V8内存分为新生代和老生代,新生代就是存活时间较短对象,老生代就是存活时间较长对象。

新生代算法(scavenge)


在分代的基础上,新生代用的是scavenge算法,再具体实现是用cheney算法,它把内存空间一分为二,每一个叫做semispace,这两个semispace一个处于使用,一个处于闲置,处于使用的叫做From,处于闲置的叫做To,赋值时先分配到From,当开始进行垃圾回收时,还在被使用的变量会被复制到To,否则会被直接释放掉,然后From和To互换位置,在开始下一次垃圾回收机制时,如果还被使用则晋升为老生代,或者占用空间大于25%。

它的缺点是只能使用堆内存的一半,这是一个典型的空间换时间算法,但新生代声明周期较短,恰恰就适合这个算法。

scavenge

老生代算法(mark-sweep & mark-compact)


老生代是用了mark-sweep 和 mark-compact算法,再用scavenge算法不合适。一是太多对象需要被赋值,而且还是没有解决空间问题。mark-sweep标记清除法,是将死亡的对象进行标记,然后去清除,但是这样会产生不连续的内存空间。为了解决这一问题,从mark-sweep演变过来一个mark-compact算法,它是将存活的对象移动到一边,然后清除边界外的内存,当CPU空间不足时效率很高。

V8后续还引入了延迟处理,增量处理,并计划引入标记处理。

mark-sweep & mark-compact
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容