本次笔记主要内容是

  • 内存管理优化
  • 编译器优化
  • 主要讲解自动内存管理和go的内存管理机制
  • 编译器优化的基本问题和思路

性能优化是什么? 提升软件系统处理能力,减少不必要的消耗,充分发掘计算机算力 资源高效利用,减少成本,提高利用率

性能优化层面: 业务代码->SDK->基础库->语言运行时->OS

业务层优化:

  • 具体场景具体分析
  • 容易获得较大收获

语言运行时优化:

  • 解决性能问题
  • 考虑更多场景
  • tradeofs 数据驱动:
  • 自动化性能分析-pprof
  • 依靠数据而非猜测
  • 首先优化最大瓶颈

这小节主要讲了性能优化的基本问题

自动内存管理

  • 动态内存:
  • 程序在运行时根据需求动态分配内存
  • 自动内存管理(垃圾回收):
  • 避免手动内存管理,专注于实现业务逻辑
  • 保证内存使用的正确性和完整性

自动内存管理相关概念

  • mutator:业务线程,分配新对象
  • collect :gc线程,找到存活对象,回收死亡对象的内存空间
  • serial gc:只有一个collector
  • cooncurrent gc:mutator(s)和collector(s)可以同时执行

Go内存管理及优化 分块

分块:为对象在heap上分配内存
提前将内存分块
对象分配,根据对象大小自动分配

缓存

  • tcmalloc :thread caching
  • mcahe管理一组maspan
  • 当maspan中没有分配的对象,mspan会被缓存在mcentral中,而不是被立刻释放出来

内存管理优化

go的内存分配比较耗时pprof是最频繁调用的函数之一 我们可以有的优化方案:Banlanced GC

  • 每个g都绑定一大块的内存
  • GAB用于小对象分配
  • bump pointer风格对象分配
  • 无须和其他分配请求互斥
  • 分配动作高效

对象分配在我们实际开发中是一种十分高频的操作 ,所以我们需要及时的对我们的内存进行优化,优化后的程序才会有更好的用户体验(刷抖音更流畅,双十一购物不会卡顿,游戏更畅快)等多方面的实际用途,这块知识点是基础中的基础,也要实际的动手试一下才会知道哦~ 这些就是本次课程关于go内存管理优化的笔记啦,还不是很完整 后续会继续补充~