1.哪里优化?
1.pprof->发现代码冗余->业务层优化
2.sdk优化
2.自动内存管理
自动内存管理做了什么?
1.分配内存给新对象
2.找到已有的对象
3.回收死对象
如何回收垃圾?
- 追踪垃圾回收
2.分代GC(generational GC)
3.引用计数
Go内存分配-分块
Q:
1.为什么分块? 类似os的内存管理模式将内存先分块吗
2.分块的好处? 不同块的里面的小块大小不同可灵活适合内存的对象吗
Go内存分配-缓存
类似多级缓存?
go对象分配中发现多为小对象分配,而小对象分配通过go的分配机制 g->t->p->mcache->mspan->memory block->return opint 消耗过高,因此字节跳动对其小分配对象优化提出了Balance GC
缺点:1.一个GAB若有小对象1B,则该1k的GAB都会被标记为存活对象,内存浪费
对此解决方案:copying gc
3.编译器和静态分析
3.1编译器结构
3.2 静态分析
3.3过程内分析和过程件分析
4.GO编译器优化
1.inline:函数内联
Beast Mode 对编译器函数内联规则优化,让尽量发生函数内联
2.逃逸分析 分析没逃逸的对象,让对象尽量在栈上分配.特点,栈的分配回收有os操作,快!