当前位置: 首页 > news >正文

垃圾回收(GC)

内存管理策略,在业务进程运行的过程中,由垃圾收集器以类似守护协程的方式在后台运行,按照指定策略回收不再被使用的对象,释放内存空间进行回收

优势:

屏蔽内存回收的细节:屏蔽复杂的内存管理工作,更好聚焦于业务逻辑

以全局视野执行任务:全局管理临界资源的使用

劣势:

提高下限但降低了上限:失去控制主权,除运用有限的GC调优参数外,更多的自由度都被阉割,需要向系统看起,服从设定

增加额外成本:需要额外的状态信息用以存储全局的内存使用情况,有时需要中断整个程序用以支持垃圾回收工作

垃圾回收算法

标记清扫

可达对象:对象和对象之间通过指针记录依赖关系,通过指针依赖的路径实现标记,从根对象出发将所能达到的对象全部进行标记

不可达对象:清扫完一轮后,剩下没有被标记的对象,代表不在被使用方所关心,就可以对内存进行回收
在这里插入图片描述
标记:标记出当前还存活的对象

清扫:清扫到未被标记到的垃圾对象

类似于排除法的间接思路,不直接查找垃圾对象,而是标记存活对象,取补集推断出垃圾对象

会产生内部碎片,因为清扫后,空闲的内存块可能零星碎片化分布,对大对象需要分配内存,可能会因为无法化零为整导致分配失败

标记压缩

在标记清扫的基础上进行压缩,在清扫的同时,对还存活对象进行压缩整合,将已使用的内存块进行位置的转移,压缩在一起使得更加紧凑
在这里插入图片描述

半空间复制

以空间换时间

分配两片大小相等的空间fromspace和tospace

每轮只使用fromspace空间(正常分配内存),以GC作为分水岭划分轮次

GC时,将fromspace存活对象转移到tospace中,进行空间压缩整合

GC后交换fromspace和tospace,开启新轮次
在这里插入图片描述

引用计数

对象每被其他对象引用一次,计数器加1

每被删除引用一次,计数器减1

GC时,把计数器等于0的对象删除,不在被用户需要

无法解决循环引用或自引用问题
在这里插入图片描述

Golang垃圾回收

并发三色标记法+混合写屏障机制

三色标记法

在这里插入图片描述
属于标记清扫算法的一种实现

对象分为:黑白灰

从稳定的根对象出发

黑:对象自身存活,且指向对象都已标记完成

白:对象尚未被标记到,可能是垃圾对象

灰:对象自身存活,其指向对象还未标记完成

标记开始前,将根对象(全局对象,栈上局部变量等)置黑,将其所指向的对象置灰

标记规则是,从灰对象出发,将其所执行的对象都置灰,之后对当前灰对象置黑

标记结束后,白对象就是不可达的垃圾对象,进行清扫

http://www.dtcms.com/a/287907.html

相关文章:

  • 机器学习漫画小抄 - 彩图版
  • Linux内核设计与实现 - 第6章 内核数据结构
  • 编程思想:程序自身的模型/函数模型硬件标准如何实现
  • MCP 协议分析 二 Sampling
  • synchronized锁升级机制
  • 100条常用SQL语句
  • Spring AI 1.0版本 + 千问大模型之文本对话
  • ReentrantLock和synchronized的区别
  • 第二阶段-第二章—8天Python从入门到精通【itheima】-133节(SQL——DQL——基础查询)
  • 解决Maven版本不兼容问题的终极方案
  • 操作系统1.1.1+1.1.2:操作系统的概念、功能
  • 软考高级之工程工期成本计算题
  • 神经网络:从模式组合到多层神经网络的进化
  • 自由学习记录(70)
  • Java程序猿搬砖笔记(十九)
  • 零基础 “入坑” Java--- 十二、抽象类和接口
  • 从五次方程到计算机:数学抽象如何塑造现代计算
  • 大数据之路:阿里巴巴大数据实践——日志采集与数据同步
  • 网络爬虫概念初解
  • Rust Web 全栈开发(九):增加教师管理功能
  • 对话访谈 | 盘古信息×锐明科技:中国企业高质量出海“走进去”和“走上去”
  • 实验室危险品智能管控:行为识别算法降低爆炸风险
  • 配置华为交换机接口链路聚合-支持服务器多网卡Bind
  • element ui 表格懒加载操作问题
  • 最终分配算法【论文材料】
  • OpenCV 官翻6 - Computational Photography
  • 市场数据+幸存者偏差提问,有趣的思考?
  • 基于dcmtk的dicom工具 第六章 StoreSCU 图像发送
  • 研究的艺术
  • simulink系列之模型接口表生成及自动连线脚