当前位置:网站首页>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.
边栏推荐
- 一次线上事故,我顿悟了异步的精髓
- "A daily practice, happy water problem" 1374. Generate a string with an odd number of each character
- Silver circ: letter with material life insurance products should be by the insurance company is responsible for the management
- 特拉维夫大学 | Efficient Long-Text Understanding with Short-Text Models(使用短文本模型进行高效的长文本理解)
- 磁盘分区的知识
- Introduction of uncommon interfaces of openlayers
- 基于 flex 布局实现的三栏布局
- [安洵杯 2019]easy_web
- C# Barrier class
- AI Scientist: Automatically discover hidden state variables of physical systems
猜你喜欢

Redis集群配置

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

软件成分分析:华为云重磅发布开源软件治理服务

浅议.NET遗留应用改造

ECCV 2022 | 通往数据高效的Transformer目标检测器

LeetCode - 105. 从前序与中序遍历序列构造二叉树;023.合并K个升序链表

实现fashion_minst服装图像分类

OpenCV开发中的内存管理问题
![[AnXun cup 2019] easy_web](/img/26/c04bc8b9c65ac75ddd2696b48e1661.png)
[AnXun cup 2019] easy_web

TPAMI2022 | TransCL: based on the study the compression of the Transformer, more flexible and more powerful
随机推荐
传感器工作原理
arm64麒麟安装paddlehub(国产化)
GNN教程:图神经网络基础知识!
特拉维夫大学 | Efficient Long-Text Understanding with Short-Text Models(使用短文本模型进行高效的长文本理解)
Parse the commonly used methods in the List interface that are overridden by subclasses
The five classification of software testing
【LeetCode】1374. 生成每种字符都是奇数个的字符串
shell:条件语句
AI Scientist: Automatically discover hidden state variables of physical systems
信息学奥赛一本通(1259:【例9.3】求最长不下降序列)
你是几星测试/开发程序员?技术型选手王大拿......
Digital twins help visualize the construction of smart cities
即时通讯开发移动端网络短连接的优化手段
Day35 LeetCode
ssdp协议搜索GB28181设备
SQL 嵌套 N 层太长太难写怎么办?
云平台简介
js如何获取浏览器缩放比例
9,共模抑制比一-不受输入信号中共模波动的影响。【如何分析共模CM抑制比。】
李沐动手学深度学习V2-bert和代码实现