go语言性能优化及内存管理

87 阅读2分钟

<本次笔记主要内容是>

  • 内存管理优化 编译器优化
  • 主要讲解自动内存管理和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内存管理优化的笔记