Go自动内存管理之垃圾回收|青训营笔记10

65 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 10天

简要介绍

自动内存管理(垃圾回收)指:由程序语言的运行时系统管理动态内存。

自动内存管理的优势在于:

  • 1 避免手动内存管理,专注于实现业务逻辑

  • 2 保证内存使用的正确性安全性:double-free problem, use-after-free problem

两语句的使用情况如下:

image.pngimage.png

相关概念

● Mutator:业务线程,分配新对象,修改对象指向关系

● Collector: GC线程,找到存活对象,回收死亡对象的内存空间

● Serial GC:只有一个collector

● Parallel GC:支持多个collectors同时回收的GC算法

●Concurrent GC: mutator(s)和collector(s)可以同时执行

  • Collectors必须感知对象指向关系的改变!

image.png

评价GC算法 :

  • 安全性(Safety):不能回收存活的对象基本要求

  • 吞吐率(Throughput): 1 GC时间/程序执行总时间GC时间/程序执行总时间GC时间/程序执行总时间 花在GC.上的时间

  • 暂停时间(Pause time): stop the world (STW)业务是否感知

  • 内存开销(Space overhead) GC元数据开销

追踪垃圾回收(Tracing garbage collection)

引用计数(Reference counting)

追踪垃圾回收

  • 对象被回收的条件:指针指向关系不可达的对象

    image.png
  • 标记根对象

    • 静态变量、全局变量、常量、线程栈等
image.png
  • 标记:找到可达对象
    • 求指针指向关系和传递闭包:从根对象出发,找到所有可达对象
image.png
  • 清理:所有不可达对象
    • 将存活对象复制到另外的内存空间(Copying GC)
    • 将死亡对象的内存标己为可分配”(Mark sweep Gq)
    • 移动并整理存活对象(Mark compact GC)
image.png
  • 根据对象的生命周期,使用不同的标记和清理策略
    • Copying GC:将对象复制到另外的内存空间
image.png
  • Mark-sweep GC:使用free list管理空闲内存

image.png
  • Compact GC:原地整理对象
image.png

总结

本文我们学习了自动内存管理的背景和意义,进一步学习概念和评估方法,最后对追踪垃圾回收的过程进行了解。