当前位置:网站首页>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.
边栏推荐
猜你喜欢

Redis集群配置

一次线上事故,我顿悟了异步的精髓

解析Collection接口中的常用的被实现子类重写的方法

牛客题目——滑动窗口的最大值、矩阵最长递增路径、顺时针旋转矩阵、接雨水问题

解析List接口中的常用的被实现子类重写的方法

LeetCode:622. 设计循环队列【模拟循环队列】

In action: 10 ways to implement delayed tasks, with code!

Flutter with internationalized adapter automatically generated

Parse common methods in the Collection interface that are overridden by subclasses

顺序查找和折半查找,看这篇就够了
随机推荐
如何解决图像分类中的类别不均衡问题?不妨试试分开学习表征和分类器
Thread线程类基本使用(上)
Tencent YunMeng every jie: I experienced by cloud native authors efficiency best practices case
【手撕AHB-APB Bridge】~ AMBA总线 之 APB
ssdp协议搜索GB28181设备
用了TCP协议,就一定不会丢包吗?
【LeetCode】1374. 生成每种字符都是奇数个的字符串
ECCV 2022 | 通往数据高效的Transformer目标检测器
LeetCode - 105. 从前序与中序遍历序列构造二叉树;023.合并K个升序链表
The time series database has been developed for 5 years. What problem does it need to solve?
基本语法(三)
Triacetin是什么化学材料
信息学奥赛一本通(1258:【例9.2】数字金字塔)
arm64麒麟安装paddlehub(国产化)
浅议.NET遗留应用改造
Qt提升自定义控件,找不到头文件
【软件工程导论】软件工程导论笔记
PLC工作原理动画
Parse common methods in the Collection interface that are overridden by subclasses
unittest自动化测试框架总结