• V8引擎新老生代回收机制及对比


    一.什么是V8引擎

    目前最主流的JavaScript执行引擎,V8采用即时编译,内存设限极大增加了运行速度,垃圾回收策略采用分代回收的思想

    内存分为新生代回收机制,老生代回收机制,针对不同的对象采用不同的算法,如下图所示:

    二.V8中常用的GC算法

    分代回收 空间复制 标记清除 标记整理 标记增量

    1.V8的内存分配

    如上图所示,V8内存空间一分为二,左侧白色背景部分用于存放新生代对象  新生代指的是存活时间较短的对象

    1-1新生代对象回收实现

    回收过程采用复制算法+标记整理,新生代内存区分为两个等大小的空间,使用空间为From,空闲空间为To,活动对象存储于From空

    间,标记整理后将活动对象拷贝至To,From与To交换空间完成释放。

    1-2回收细节说明

    拷贝过程中可能出现晋升,(晋升就是将新生代对象移动至老生代),出现晋升的情况有两种

    1.一轮GC还存活的新生代需要晋升

    2.To空间的使用率超过25%

    1-2老年代对象回收实现

    老年代对象存放在右侧老年代区域 老年代对象指存活时间较长的对象 其中包括闭包的里面的一些变量和一些全局变量。主要采用标记

    清除,标记整理 增量标记算法。首先使用标记清除完成垃圾空间的回收,采用标记整理进行空间优化,采用增量标记进行效率优化。

    1-3新老生代回收对比

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

    老生代区域垃圾回收不适合复制算法(因为老生代区域比较大,一分为二浪费比较大,复制算法比较浪费时间)

    增量标记优化垃圾回收 程序执行与垃圾回收交替执行

    ---感谢阅读,o(* ̄︶ ̄*)o开心每一天!
  • 相关阅读:
    scanf与scanf_s的区别
    C语言输出时的各种%
    Windows下配置OpenGL环境
    C#高级进阶--重写函数
    Linux下安装国际版QQ (转)
    Linux Vim不明原因卡死解决办法
    iCamera App Kit 使用说明
    usb2.0高速视频采集之68013A寄存器配置说明
    iSensor APP 之 摄像头调试 OV5642 续集2
    iSensor APP 之 摄像头调试 OV9655 测试之二
  • 原文地址:https://www.cnblogs.com/websiteblogs/p/14289960.html
Copyright © 2020-2023  润新知