Go内存管理 | 青训营笔记

71 阅读1分钟

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

1.自动内存管理

1.1自动内存管理的概念

自动内存管理(也称垃圾回收),管理的是动态内存(程序在运行时根据需求动态分配的内存),程序语言的运行时系统管理动态内存,这样就可以避免手动内存管理,使我们的程序员更专注于实现业务逻辑,降低开发压力,保证内存使用的正确性和安全性

1.2GC(垃圾回收)三大主要核心任务

  • 为新对象分配新空间
  • 找到存活对象(程序执行的时候还会使用到的对象)
  • 回收死亡对象的内存空间

1.2GC(垃圾回收)涉及的相关概念

1.2.1GC算法(其中蓝色线条代表Mutator,橙色线条代表Collector):

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

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

  • Serial GC:只有一个collector(会暂停) image.png
  • Parallel GC:并行GC,支持多个collectors同时回收的GC image.png
  • Concurrent GC:并发GC,支持mutator(s)和collector(s)同时执行 image.png

1.2.2GC算法的性能指标

  • 安全性(Safety):不能回收存活的对象,安全性是基本要求
  • 吞吐率(Throughput)=1GC时间程序执行时间1-\frac{GC时间}{程序执行时间},衡量的是花在GC上执行的时间,吞吐率越大说明花在GC上的时间越少,效率更高
  • 暂停时间(Pause time):stop the world (STW),暂停时间越短越好
  • 内存开销(Space overhead):GC内存开销越小越好