GC(垃圾回收机制)笔记2021-08-17

本文深入探讨了垃圾回收(GC)的基本概念,包括引用计数、标记清除、标记整理等常见算法,以及它们的优缺点。特别提到了V8引擎的垃圾回收策略,如分代回收、空间复制等,旨在优化内存管理和性能。同时,介绍了V8引擎针对新生代和老生代对象的不同处理方式,以及如何避免碎片空间。
摘要由CSDN通过智能技术生成

GC(垃圾回收机制)笔记

垃圾:

  1. 不在需要使用
  2. 不能在访问到

常见算法:

  • 引用计数
  • 标记清楚
  • 标记整理
  • 分代回收

引用计算算法

核心:设置引用计数器是否为0来查看是否回收

通过引用关系改变的时候修改引用数字,当数字为0的时候立马回收

优点:

  • 发现垃圾立即回收
  • 最大限度减少程序暂停

缺点:

  • 时间开销大
  • 无法回收循环引用对象

可达对象:从根上出发可以能够找到


标记清除算法

核心:分为两个阶段完成: 标记,清除

  • 遍历所有对象找标志活动的对象
  • 遍历所有对象清除没有标记对象
  • 回收相应的空间(整个方式可能是通过递归的方式)

优点:

  • 解决循环引用

缺点:

  • 容易产生碎片空间,浪费空间
  • 不会立即回收垃圾对象

标记整理算法
  • 标记整理可以看做标记清楚的增强
  • 标记阶段的操作和标记清楚一致
  • 清除阶段会限制性整理,移动对象位置(地址上产生连续)

优点

  • 减少碎片化空间

缺点

  • 不会立即回收垃圾对象

V8 是什么?

  • 一款主流的JavaScript执行引擎
  • 即使编译
  • 内存设限

V8垃圾回收策略

  • 分代回收

  • 分为老生代,新生代

V8中常用的GC算法

  • 分代回收
  • 空间复制
  • 标记清楚
  • 标记整理
  • 标记增量
v8内存分配

新生代:存活时间较短(32M| 16M)

​ 实现: 复制算法+标记整理算法

​ 使用空间为From,空闲空间为To

​ 活动对象存储为From空间

​ 标记整理之后将活动队形拷贝致To

​ From与To空间完成释放(From释放,To保留)

晋升:将新生代对象移动至老生代(经历一轮GC之后或者To空间使用率超过25%)

**老生代:**存活时间较长的对象(1.4G|700M)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值