性能优化|青训营

89 阅读1分钟

追求极致性能

业务层优化/语言运行优化/数据驱动

接口: commands APIs New APIs

实现:compiler Scheduler GC Runtime Libs Profiling

自动内存管理

GC算法 安全性

追踪垃圾回收

对象被回收的条件:指针条件指向关系不可达的对象

标记根对象:静态变量、全局变量、

分代GC

分代假说

很多对象在分配出来后很快就不再使用

年轻代:

存活对象很少

GC吞吐量很高

老年代:

对象趋于一直活着,反复复制开销很大

引用计数

每个对象都有一个与之关联的引用数目 胡 对象存活的条件:当且仅当引用数大于0

优点:

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

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

缺点:

维护引用计数开销较大:通过原子操作保证对引用计数操作的原子性和可见性

无法回收环形数据结构——weak reference

内存开销:每个对象都引入额外的内存空间存储引用数目

回收内存时依然可能引发暂停

内存管理:

对象分配 每秒分配GB级别的内存

小对象占比较高

go内存分配比较耗时

分配路径长

线上pro

优化方案:

每个g都绑定一大块内存

GAB用于noscan类型的小对象分配:<128B

使用三个指针维护 GAB :base,end,top

->无需和其他分配请求互斥

->分配动作简单高效

本质:将多个小对象的分配合并成一次大对象的分配

问题:GAB的对象分配方式会导致内存被延迟释放