本次笔记主要内容是
- 内存管理优化
- 编译器优化
- 主要讲解自动内存管理和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内存管理优化的笔记啦,还不是很完整 后续会继续补充~