• 你需要知道的前端知识点,V8引擎是什么?采用哪些GC算法?


    一、简单介绍V8引擎

    1. V8引擎是一款主流的JavaScript执行引擎;
    2. V8执行引擎采用及时编译(执行速度提升);
    3. V8引擎中内存设置有上限(下方进行详解);

    二、V8回收策略

    1. 采用分代回收思想;
    2. 内存分为新生代对象存储与老生代对象存储;
    3. 针对不同的对象采用不同的算法;

    在这里插入图片描述

    三、常用的GC算法(垃圾回收机制)

    1. 分代回收
    2. 空间复制
    3. 标记清除
    4. 标记整理
    5. 增量算法

    四、V8内存分配

    在这里插入图片描述

    在上图中V8内存空间一分为二 From、To作为新生代对象存储区 其则老生代存储区

    新生代存储区介绍

    1. 即存活时间较短的对象(例:局部作用域内的变量执行完需要回收);
    2. 内存区分为两个等大空间(即:From空间、To空间);
    3. 在64位操作系统中内存大小位 32MB,32位操作系统中为16MB;

    老生代存储区介绍

    1. 即存活时间较长的对象(例:全局变量、闭包变量数据);
    2. 在64位操作系统中内存大小位 1.5G,32位操作系统中为700MB;

    五、新生代对象回收实现

    1. 回收过程采用复制算法+标记整理;
    2. 使用空间为From、空闲空间为To;
    3. 活动对象存储于From空间;
    4. 标记整理后将活动对象拷贝至To空间;
    5. From与To交换空间完成释放;

    回收细节说明

    1. 在拷贝过程中可能出现晋升(即:将新生代对象移至老生代对象);
    2. 一轮GC后还存活的新生代需要晋升(移至老生代);
    3. To空间使用率超过25%(From与To进行空间交换时如果不设限会存在空间不足的情况、所以这里限制为25%);

    六、老生代对象回收实现

    1. 主要采用标记清理、标记整理、增量标记算法;
    2. 首先使用标记清除完成垃圾空间的回收(存在空间碎片化、但回收速度极快);
    3. 在新生代晋升过程中,老生代空间不足以存放新生代时,则会采用标记整理进行空间优化;(整理碎片化空间);
    4. 采用增量标记进行效率优化;

    七、新老生代回收细节对比

    1. 新生代区域垃圾回收使用空间换时间(采用复制算法每时每刻有空闲空间存在,即牺牲一定量空间来提升回收速度);
    2. 老生代区域垃圾回收不适合复制算法(空间较大,一分为二浪费空间,数据量大如果采用复制算法则会消耗许多时间);

    八、增量标记如何进行垃圾回收

    在这里插入图片描述

    如图所示:程序执行与垃圾回收交替执行

    总结

    1. V8引擎作为现主流的JavaScript执行引擎;
    2. 内存设置上限(作为web应用来说足够使用,超过1.5G在回收过程中会增加人体感知。 因为在回收执行时程序时停止运行的);
    3. V8采用分代回收的思想实现垃圾回收(即分为新生代、老生代储存区);
    4. V8回收中常见的GC算法 (新生代:复制算法,标记整理。老生代:标记清理,标记整理,增量标记);

    最后放上 一张图表达的V8引擎执行过程 方便吸收理解
    感兴趣的小伙伴可以看看喔

  • 相关阅读:
    毅速3D打印:深骨位零件制造首选3D打印
    Fiddler工具使用汇总
    Go 言 Go 语,一文看懂 Go 语言文件操作
    SpringSecurity6 | 自动配置(下)
    5个.NET开源且强大的快速开发框架(帮助你提高生产效率)
    征服地球极限,中国极地科考与登峰事业的“御寒”之旅
    微信小程序案例2-3:婚礼邀请函
    Mac M2/M3 芯片环境配置以及常用软件安装-前端
    数据结构与算法(Java篇)笔记--插入排序
    12.3 实现模拟鼠标录制回放
  • 原文地址:https://blog.csdn.net/qq_45284938/article/details/127975970