zoukankan      html  css  js  c++  java
  • 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开心每一天!
  • 相关阅读:
    phpize使用方法
    PHP安装redis扩展
    lnmp 搭建后,nginx下php文件404但是html文件正常访问
    nginx配置https访问安装ssl证书
    Linux安装git最新版本
    微信公众号开发处理微信昵称带图片问题
    如何撰写技术文档
    Asp.Net Core 2.0实现HttpResponse中繁切换
    EF6.0 下sql语句自动生成的参数类型decimal(18,2)修改
    Windows注册表详解
  • 原文地址:https://www.cnblogs.com/websiteblogs/p/14289960.html
Copyright © 2011-2022 走看看