高性能Go语言发行版优化与落地实践 | 青训营笔记

195 阅读2分钟

这是我参与「第三届青训营-后端场」笔记创作活动的第4篇笔记,课程的内容是关于高性能go语言发行版优化和落地实践。

1.优化

性能优化可以提升软件系统处理能力,减少不必要的消耗。做好性能优化后可以提升用户体验,让资源得到高效利用。

1)内存管理优化

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

自动内存管理(垃圾回收):由程序语言运行时系统管理动态内存,可以避免手动内存管理,保证内存使用的正确性和安全性。

其有三个任务:为新对象分配空间,找到存活对象和回收死亡对象的内存空间。

GC算法的安全性,吞吐率,暂停时间和内存开销的数据需要重点掌握。

追踪垃圾回收需要标记需要回收的对象,即指针指向关系不可达的对象,标记的根对象应该是静态变量,全局变量,常量和线程栈等。

分代GC:可以处理不同年龄段的对象处于heap的不同区域。

引用计数,每个对象都有一个引用数目,当引用数为0时删除对象回收内存。

Go内存分配:

①缓存: 每个p上都有多层缓存来缓存内存,小对象的内存占用比较大。

②优化: balanced GC把多个小对象合称为一个对象,使空间得到更高效的利用。

2)编译器优化

主要学习的是后端优化,即在代码优化和代码生成的步骤的优化。

静态分析代码执行过程,同时分析代码内分析过程和代码间分析过程。通过对代码的过程内分析和过程间分析可以得到具体的优化步骤。

函数内联:将被调用函数的函数体的副本替换到调用位置上,同时重写代码以反映参数的绑定,优点是可以消除函数调用开销,将过程间分析转换为过程内分析。

通过对课程的学习,了解到了go性能优化的各种方式,包括内存优化和编译器优化。