V8内存管理机制

限制内存的原因

  • V8最初为浏览器而设计,不太可能遇到大量内存的使用场景
  • 防止因为垃圾回收所导致的线程暂停执行的时间过长

V8的回收策略

  • V8采用了一种分代回收的策略,讲内存分为两个生代:新生代和老生代
  • V8分别对新生代和老生代使用不同的垃圾回收算法来提升垃圾回收的效率

新生代垃圾回收

  • from空间存放不需要被回收的对象,to空间存放需要被回收的对象
  • (下图为回收obj2)


    image.png

新生代对象的晋升

  • 在新生代垃圾回收的过程中,当一个对象经过多次复制后依然存活,他将会被认为是生命周期较长的对象,随后会被移动到老生代中,采用新的算法进行管理
  • 在From空间和To空间进行反转的过程中,如果To空间中的使用量超过了25%,那么就将From中的对象直接晋升到老生代内存空间中

老生代垃圾回收

  • 老生代内存空间是一个连续的结构


    image.png
  • 标记清除(会导致内存不连续)


    image.png
  • 标记合并


    image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容