【学习笔记】V8垃圾回收策略

V8
  • V8是一款主流的JavaScript执行引擎
  • V8采用即时编译,速度比较快
  • V8内存设限,64位操作系统中上限为1.5G,32位系统中不超过800M
V8垃圾回收策略
  • 采用分代回收的思想
  • 内存分为新生代\老生代
  • 针对不同对象采用不同算法

v8常用的GC算法: 分代回收、空间复制、标记清除、标记整理、标记增量

1、 如何回收新生代对象

V8内存分配,

  • V8内存空间一分为二
  • 小空间用于存储新生代对象(32M|16M)不同的操作系统,对象大小空间不一样
  • 新生代指的是:存活事件比较短的对象,例如:函数作用域中的对象
  • 老生代指的是:存活事件比较长的对象,例如:全局作用域中的对象

分为新生代和老生代存储区,其中新生代存储区分为:form和to两个等量空间

新生代对象回收实现
  • 回收过程采用复制算法+标记整理
  • 新生代内存区分为二个等大小的空间
  • 使用空间为from,空闲空间为to
  • 活动对象存储与From空间
  • 标记整理后,将活动对象拷贝至To
  • From与To交换空间完成释放

回收细节说明

  • 拷贝过程中可能出现晋升
  • 晋升就是将新生代对象移动到老生代
  • 一轮GC还存活的新生代对象需要晋升到老生代存储区
  • To空间的使用率超过25%
2、 V8如何回收老生代对象
  • 老生代对象存放在右侧老生代区域
  • 64位操作系统1.4G,32位操作系统700M
  • 老年代对象就是指存活时间比较长的对象

老年代对象回收实现流程

  • 主要采用标记清除、标记整理、增量标记算法
  • 首先是用标记清除完成垃圾空间的回收
  • 当新生代对象往老生代对象移动的时候,如果存在空间不足的情况,则对老生代存储区采用标记整理的算法进行空间优化
  • 采用增量标记进行效率优化
什么是增量标记算法

所谓的增量标记,其实就是将"标记清除"算法中的"标记"阶段,分开进行标记,与"程序执行"交替执行,不会堵塞程序执行,

不用担心GC回收占用时间久,因为在老生代的垃圾达到1.5G的时候,回收时间最多也只有1s左右,

相关推荐
一 乐6 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
好奇龙猫6 小时前
【AI学习-comfyUI学习-第三十节-第三十一节-FLUX-SD放大工作流+FLUX图生图工作流-各个部分学习】
人工智能·学习
saoys6 小时前
Opencv 学习笔记:图像掩膜操作(精准提取指定区域像素)
笔记·opencv·学习
电子小白1237 小时前
第13期PCB layout工程师初级培训-1-EDA软件的通用设置
笔记·嵌入式硬件·学习·pcb·layout
唯情于酒8 小时前
Docker学习
学习·docker·容器
xkxnq8 小时前
第二阶段:Vue 组件化开发(第 16天)
前端·javascript·vue.js
Van_Moonlight8 小时前
RN for OpenHarmony 实战 TodoList 项目:空状态占位图
javascript·开源·harmonyos
xkxnq9 小时前
第一阶段:Vue 基础入门(第 15天)
前端·javascript·vue.js
clorisqqq9 小时前
人工智能现代方法笔记 第1章 绪论(1/2)
人工智能·笔记
charlie1145141919 小时前
嵌入式现代C++教程: 构造函数优化:初始化列表 vs 成员赋值
开发语言·c++·笔记·学习·嵌入式·现代c++