高性能Go语言发行版优化及编译器性能优化 | 青训营笔记

34 阅读1分钟

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

1. 高性能Go语言发行版优化

1.1 内存管理优化

image.png 软件基本结构:

image.png

性能优化层面:

image.png

性能优化的原则——数据驱动

image.png

自动内存管理:

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

自动内存管理(垃圾回收):由程序语言的运行时系统管理动态内存

image.png

image.png

image.png 追求吞吐率越高越好、暂停时间越短越好(业务无感知)、内存开销越小越好。

追踪垃圾回收:

image.png

分代GC:Generational GC

image.png 引用计数:

image.png

优点:

内存管理的操作被平摊到程序执行过程中

内存管理不需要了解runtime的实现细节:C++智能指针

缺点:

image.png

1.2 Go内存分配

分块:

目标:为对象在heap上分配内存

image.png

缓存:

image.png

字节优化方案:Balanced GC

image.png

image.png

image.png

2. 编译器优化

静态分析:

image.png

函数内联(lnlining):

内联:将被调用函数的函数体的副本替换到调用位置上,同时重写代码以反映参数的绑定

逃逸分析:分析代码中指针的动态作用域:指针在何处可以被访问到

image.png