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.

go——垃圾回收机制(GC)相关推荐

  1. 垃圾回收机制GC知识再总结兼谈如何用好GC(转)

    作者:Jeff Wong  出处:http://jeffwongishandsome.cnblogs.com/  本文版权归作者和博客园共有,欢迎围观转载.转载时请您务必在文章明显位置给出原文链接,谢 ...

  2. JAVA垃圾回收机制GC之我姐是明星

    JAVA垃圾回收机制GC(Garbage Collection) 工作面试老伙伴之java垃圾回收机制 什么是GC,为什么要GC(我的明星老姐) 判断垃圾(找到不常穿的衣服) A 引用计数算法 B 可 ...

  3. Java-JVM虚拟机内存垃圾回收机制gc入门:引用类型,对象标记算法,回收算法,常见的 garbage collector

    文章目录 GC的优缺点 引用的四种类型 对象标记算法 引用计数法 可达性分析法 回收算法 标记-清除算法(Mark-Sweep) 复制算法 标记-整理算法(Mark-Compact) 分代收集算法 常 ...

  4. C#垃圾回收机制(GC)

    GC的前世与今生 虽然本文是以.net作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是 ...

  5. JVM垃圾回收机制GC详解

    作为 Java 语言最重要的特性之一的自动垃圾回收机制,也是基于 JVM 实现的.那么,自动垃圾回收机制到底是如何实现的呢? 1.GC是干啥的? 进行资源的回收 1.1.对于 C/C++ 而言 对于C ...

  6. C#垃圾回收机制GC

    本章主要讲解以下C#的垃圾回收机制,之前也有文章提到: Effect C# 学习笔记 .Net资源管理_dmk17771552304的博客-CSDN博客 为什么要使用GC 提高了软件开发的抽象度 程序 ...

  7. 【JVM】JVM垃圾回收机制GC

    文章目录 JVM垃圾回收机制 一.堆内存区域划分 1.1内存分配策略 1.2永久代(Permanent Generation) 1.3元空间(MetaSpace) 二.标记算法 2.1引用计数算法 2 ...

  8. java对于垃圾回收机制[GC垃圾回收机制] 为什么有GC还会有内存溢出呢?

    java垃圾回收机制 来源于书本和工作中的总结. 内存泄露 如果分配出去的内存得不到释放,及时回收,就会引起系统运行速度下降,甚至导致程序瘫痪,这就是内存泄露 GC机制 java内存分配和回收 都是j ...

  9. gc java root_C#技术漫谈之垃圾回收机制(GC)

    GC的前世与今生 虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是 ...

  10. C#技术漫谈之垃圾回收机制(GC)

    虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是GC的第一次出现. ...

最新文章

  1. 干货讲解 | OKT507-C开发板基于Linux系统的应用笔记
  2. UITableView中发现的小技巧(不断更新)
  3. Web.xml配置详解之context-param
  4. qt mysql 清空表格_qt删除数据库中的表
  5. Java,如果这是一个更好的世界
  6. jQuery中的函数汇总1
  7. 汉诺塔计算移动次数和消耗体力
  8. flex皮肤制作---通过flash
  9. Android自动清理无用资源工具
  10. 使用JAVA工程和KEmulator模拟器开发J2ME项目
  11. 一个留美女博士的七年
  12. h5离线缓存+sessionstroage做 离线网页
  13. 大型门户网站的商业计划书(包括技术解决方案)
  14. 文学家是什么时候出现的
  15. C语言求1到1000素数之和,C语言实现1-1000中所有素数的和
  16. 圣诞节马上到了。H5+CSS3+JS制作圣诞帽头像源码送给你们。。。
  17. uni-app 对照设计稿还原不同屏幕像素适配(iPhone X)
  18. 无线连接打印服务器,如何用旧电脑架设无线网络打印服务器
  19. 仿微信朋友圈图片预览自定义View
  20. 如何在Excel表格中给某一列添加固定筛选项

热门文章

  1. 计算机无法进行磁盘碎片整理,无法启动win7系统磁盘碎片整理的解决方案
  2. 伺服舵机四方运动程序以及角度确定
  3. 佛系前端面试题记录--第五周
  4. 800个小炒,一天吃一个叫你吃三年
  5. 计算机鼠标左键不起作用,电脑鼠标左键不能用怎么办
  6. Word2013的一级标题作为一页的第一行时,出现段前距失效问题如何解决?
  7. 【论文写作技巧】Endnote参考文献统一输出格式
  8. 我们在电脑房里上计算机课英语,英语复习1
  9. 音频如何转换mp3格式?
  10. 蜜罐 计算机术语,检测虚机和蜜罐方法的概念 -电脑资料