Go 自动内存管理及优化| 青训营笔记

26 阅读2分钟

前言

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

今日学习内容:

  • 自动内存管理
  • Go 内存管理及优化
  • 编译器和静态分析
  • Go 编译器优化

正文

性能优化是什么?

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

为什么要做性能优化?

  • 提升用户体验
  • 资源高效利用,降低成本,提高效率

各个层面的性能优化

  • 业务层优化
    • 针对特定场景,具体问题,具体分析
    • 容易获得较大性能收益
  • 语言运行时优化
    • 解决更通用的性能问题
    • 考虑更多场景
    • Tradeoffs
  • 数据驱动
    • 自动化性能分析工具——pprof
    • 依靠数据而非猜测
    • 优先优化最大的瓶颈

自动内存管理

Go 内存管理及优化

编译器和静态分析

Go 编译器优化

相关术语解读

自动内存管理

  • Auto memory management: 自动内存管理
  • Grabage collction: 垃圾回收
  • Mutator: 业务线程
  • Collector: GC 线程
  • Concurrent GC: 并发 GC
  • Parallel GC: 并行 GC
  • Tracing garbage collection: 追踪垃圾回收
    • Copying GC: 复制对象 GC
    • Mark-sweep GC: 标记-清理 GC
    • Mark-compact GC: 标记-压缩 GC
  • Reference counting: 引用计数
  • Generational GC: 分代 GC
    • Young generation: 年轻代
    • Old generation: 老年代

内存管理及优化

  • TCMalloc
  • mmap() 系统调用
  • scan object 和 noscan object
  • mspan, mcache, mentral
  • Bump-pointer object allocation: 指针碰撞风格的对象分配

编译器和静态分析

  • 词法分析
  • 语法分析
  • 语义分析
  • Intermediate representation (IR) 中间表示
  • 代码优化
  • 代码生成
  • Control flow: 控制流
  • Data flow: 数据流
  • Intra-procedural analysis 过程内分析
  • Inter-procedural analysis: 过程间分析

Go 编译器优化

  • Function inlining: 函数内联
  • Escape analysis: 逃逸分析