追求极致性能
业务层优化/语言运行优化/数据驱动
接口: 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的对象分配方式会导致内存被延迟释放