Go进阶Part3 | 青训营笔记

68 阅读2分钟

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

课程内容

围绕Go 内存分配和编译器,分析 Go 内存管理过程中的问题,提出解决方案;

讲解编译器基本算法,引出编译器优化路径。

Go语言高性能优化与落地实践

优化

内存管理优化、编译器优化

相关问题

自动内存管理和Go内存管理机制、编译器优化的基本问题和思路

追求性能

性能优化

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

为什么

用户体验:提升用户体验

资源高效利用:降低成本,提高效率

优化的层面

业务代码

业务层优化:针对特定场景,具体问题,具体分析,容易获得较大性能收益

SDK

基础库

语言运行时

语言运行时优化:解决更通用的性能问题、考虑更多场景、Tradeoffs

数据驱动:自动化性能分析工具 pprof、依靠数据而非猜测、首先优化最大瓶颈

OS

内存管理

动态内存

垃圾回收

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

自动内存管理:由程序语言的运行时系统管理动态内存

三个任务

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

相关概念

  • Auto memory management: 自动内存管理
  • Grabage collction: 垃圾回收
  • Mutator: 业务线程,分配新对象,修改对象指向关系
  • Collector: GC 线程,找到存活对象,回收死亡对象的内存空间
  • Concurrent GC: 并发 GC,mutator(s)与collector(s)可以同时执行
  • Parallel GC: 并行 GC,支持多个collectors同时回收的GC算法
  • Tracing garbage collection: 追踪垃圾回收
  • Copying GC: 复制对象 GC
  • Mark-sweep GC: 标记-清理 GC
  • Mark-compact GC: 标记-压缩 GC
  • Reference counting: 引用计数
  • Generational GC: 分代 GC
  • Serial GC:只有一个collector

追踪垃圾回收

分代GC

引用计数

Go内存管理及优化

Go内存分配- 分块、Go内存分配- 缓存、Go内存管理优化、Balanced GC

编译器优化

函数内联、逃逸分析、Beast Mode 性能收益