这是我参与「第五届青训营 」伴学笔记创作活动的第4天
自动内存管理
Auto memory management: 自动内存管理 GCgo语言处理堆内存的管理方式
Grabage collction: 垃圾回收//释放过期的或者异常对象内存
Mutator: 业务线程//分配内存给对象,修改对象指向关系
Collector: GC 线程//找到存活对象,回收死亡对象的内存空间
Concurrent GC: 并发 GC //上述两个同时执行,分配内存给新对象,也回收死亡对象内存
Parallel GC: 并行 GC//支持多个Collector同时回收内存
注:Collectors必须感知对象指向关系的改变
Tracing garbage collection: 追踪垃圾回收//遍历标记正常对象删除所有不可达对象,释放内存
Copying GC: 复制对象 GC//将存活的对象复制新空间保存 Mark-sweep GC: 标记-清理 GC//将死亡对象内存区标记可分配 Mark-compact GC: 标记-压缩 GC//复制存活对象在开头
Reference counting: 引用计数//近似于C++的智能指针,缺点开销大,多线程访问需要确保原子操作
Go 内存管理及优化
TCMalloc(分配堆内存给对象)
mmap() 系统调用//向系统申请大块内存
scan object 和 noscan object//GC需要扫描|GC不需要扫描
mspan, mcache, mentral(多级缓存机制,避免反复向系统申请内存)
Bump-pointer object allocation: 指针碰撞风格的对象分配//新建更小处理内存
编译器和静态分析
词法分析
语法分析
语义分析
Intermediate representation (IR) 中间表示
代码优化
代码生成
Control flow: 控制流图
Data flow: 数据流图
Intra-procedural analysis 过程内分析//具体函数体
Inter-procedural analysis: 过程间分析
Go 编译器优化
Function inlining: 函数内联//被调函数体副本替换到调用位置上明显提升性能
Escape analysis: 逃逸分析//指针的动态作用域不逃逸出当前指向对象可以在栈上分配