Go 内存管理 | 青训营笔记

35 阅读1分钟

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

性能优化是什么?

  • 提升软件系统处理能力,减少不必要的消耗,充分发掘计算机算力

为什么要做性能优化?

  • 用户体验: 带来用户体验的提升 - 让刷抖音更丝滑,让双十一购物不再卡顿
  • 资源高效利用: 降低成本,提高效率 一 很小的优化乘以海量机器会是显著的性能提升和成本节约

image.png

image.png

总结

  • 性能优化的基本问题
  • 性能优化的两个层面
  • 性能优化的可维护性

自动内存管理

动态内存:程序在运行时根据需求动态分配的内存: malloc()

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

  • 避免手动内存管理,专注于实现业务逻辑
  • 保证内存使用的正确性和安全性: double-free problem, use-after-free problem

三个任务

  • 为新对象分配空间
  • 找到存活对象
  • 回收死亡对象的内存空间

1674130386923.png

1674130905989.png

1674130954590.png

1674131218894.png

1674131279575.png

Copying GC:把某一个内存块的里面存活的对象复制到另一块内存,那么就可以对这块内存进行回收

1674131422514.png

Mark-sweep GC:表示用连接表的形式记录空闲的内存块

1674131561327.png

Compact GC:表示移动对象到内存块的首部,从而形成大的空内存块

image.png

1674131892928.png

1674132003443.png

Go 内存分配方法

1674132526046.png

1674132640628.png

1674132685594.png

1674132750498.png

1674132940950.png

编译和静态分析

1674133198457.png

1674133446975.png

1674133536218.png

Go 编译器优化

1674133652997.png

1674133900746.png

1674133935615.png

1674134080651.png