当前位置:网站首页>go——垃圾回收机制(GC)
go——垃圾回收机制(GC)
2022-08-02 20:08:00 【Meme_xp】
GC实现原理?
什么是GC
垃圾回收也称为GC (Garbage Collection),是一种自动内存管理机制
在应用程序中会使用到两种内存,分别为堆(Heap)和栈(Stack) , GC负责回收堆内存,而不负责回收栈中的内存:栈是线程的专用内存,专门为了函数执行而准备的,存储着函数中的局部变量以及调用栈,函数执行完后,编译器可以将栈上分配的内存可以直接释放,不需要通过GC来回收。堆是程序共享的内存,需要GC进行回收在堆上分配的内存。
垃圾回收器的执行过程被划分为两个半独立的组件:
1.赋值器(Mutator)∶这一名称本质上是在指代用户态的代码。因为对垃圾回收器而言,用户态的代码仅仅只是在修改对象之间的引用关系,也就是在对象图(对象之间引用关系的一个有向图)上进行操作。
2.回收器(Collector):负责执行垃圾回收的代码。
主流算法
1.引用计数:
为每个对象维护一个引用计数,当引用该对象的对象销毁时,引用计数-1,当对象引用计数为О时回收该对象。
。代表语言:Python、PHP、Swift
。优点:对象回收快,不会出现内存耗尽或达到某个阈值时才回收。。缺点:不能很好的处理循环引用,而实时维护引用计数也是有损耗的。
⒉.分代收集∶
按照对象生命周期长短划分不同的代空间,生命周期长的放入老年代,短的放入新生代,不同代有不同的回收算法和回收频率。
。代表语言:Java。优点:回收性能好。缺点:算法复杂
3.标记-清除:
从根变量开始遍历所有引用的对象,标记引用的对象,没有被标记的进行回收。
。代表语言:Golang(三色标记法) 。优点:解决了引用计数的缺点。 。缺点:需要STW,暂时停掉程序运行。
三色标记法——混合写屏障!这里我就不写了太多了建议看刘丹冰大佬的课!!!!!!!!!!!!!!!!!!!!!
GC如何可以再次调优思路!!
1.控制内存分配的速度,限制Goroutine的数量,提高赋值器mutator的CPU利用率(降低GC的CPU利用率)
2.少量使用+连接string,避免重复扩容!
3.slice提前分配足够的内存来降低扩容带来的拷贝
4.避免map key对象过多,导致扫描时间增加
5.变量复用,减少对象分配,例如使用sync.Pool来复用需要频繁创建临时对象、使用全局变量等
6.增大GOGC的值,降低GC的运行频率
如何查看GC信息
3.
4.
边栏推荐
- OP-5,输入/输出信号范围-一信号处理能力
- 对话亚洲高校首个博士论文奖-裘捷中丨KDD2022
- 遇上Mysql亿级优化,怎么办
- ALV concept explanation
- Implement fashion_minst clothing image classification
- PyTorch分布式backends
- 2170. 使数组变成交替数组的最少操作数
- SQL Server实现group_concat功能
- pytorch的tensor创建和操作记录
- The so-called fighting skill again gao also afraid of the chopper - partition, depots, table, and the merits of the distributed
猜你喜欢
Helm基础知识
Redis cluster configuration
OpenCV开发中的内存管理问题
即时通讯开发移动端网络短连接的优化手段
ShardingSphere-proxy +PostgreSQL implements read-write separation (static strategy)
Leetcode刷题——字符串相加相关题目(415. 字符串相加、面试题 02.05. 链表求和、2. 两数相加)
unittest自动化测试框架总结
Fiddle设置接口数据用指定工具查看;Sublime Text设置json数据格式化转换
callback prototype __proto__
用了TCP协议,就一定不会丢包吗?
随机推荐
对话亚洲高校首个博士论文奖-裘捷中丨KDD2022
OpenCV开发中的内存管理问题
Electron User Guide Beginning Experience
「每周译Go」这次我们来点不一样的!--《How to Code in Go》系列上线
LeetCode 622 设计循环队列[数组 队列] HERODING的LeetCode之路
APP自动化uiautomator2获取toast
框架设计:PC 端单页多页框架如何设计与落地
信息学奥赛一本通(1256:献给阿尔吉侬的花束)
「 每日一练,快乐水题 」1374. 生成每种字符都是奇数个的字符串
软件成分分析:华为云重磅发布开源软件治理服务
Solve the docker mysql can't write Chinese
网络协议介绍
In action: 10 ways to implement delayed tasks, with code!
程序员也许都缺一个“二舅”精神
实现fashion_minst服装图像分类
.NET如何快速比较两个byte数组是否相等
Informatics Olympiad All-in-One (1260: [Example 9.4] Intercepting Missiles (Noip1999))
即时通讯开发移动端网络短连接的优化手段
模板的进阶
特拉维夫大学 | Efficient Long-Text Understanding with Short-Text Models(使用短文本模型进行高效的长文本理解)