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开心每一天!
  • 相关阅读:
    python装饰器的wraps作用
    lambda函数和map函数
    python直接赋值、切片、浅拷贝和深拷贝
    ubuntu shell脚本出错 dash
    关于方法论和相关书籍
    如何安全的大数据量表在线进行DML操作
    mysql group by 查询非聚集列
    MongoTemplate进行增删改查
    Mockito 的用法
    一个人开始优秀的3种迹象
  • 原文地址:https://www.cnblogs.com/websiteblogs/p/14289960.html
Copyright © 2011-2022 走看看