这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
一、自动内存管理
三个任务
- 为新对象分配空间
- 找到存活对象
- 回收死亡对象的内存空间
注:GC指垃圾回收
追踪垃圾回收
根据对象的生命周期,使用不同的标记与清理策略。
分代垃圾回收(Generational GC)
对年轻和老年的对象制定不同的GC策略。
引用计数
对象存活的条件:当且仅当引用数大于0。
二、内存管理及优化
字节的优化方案为:Balance GC
每个g都绑定一大块内存(1KB),称作 goroutine allocation buffer(GAB)
三、编译器和静态分析
静态分析:不执行程序代码,推导程序的行为,分析程序的性质。
总结
- 编译器的结构与编译的流程
- 编译器后端优化
- 数据流分析和控制流分析
- 过程内分析和过程间分析
四、go编译器优化
函数内联
内联:将被调用函数的函数体(callee)的副本替换到调用位置(caller)上,同时重写代码以反映参数的绑定。
Beast Mode
调整函数内联的策略,使更多函数被内联。
逃逸分析
逃逸分析:分析代码中指针的动态作用域:指针在何处可以被访问
五、个人总结
本次课程从go的内部以及编译器的实现逻辑出发,详细阐述了不同的编程语句以及不同的编程思路在资源分配上有什么区别。尽管目前我学习的还是编程的基础部分,但是这对于我以后的项目设计上来说非常受益。当然由于目前还处于基础阶段,所以对这部分的知识觉得比较晦涩难懂。这篇笔记的主要作用是记录课程讲解的主要框架,方便日后的学习回顾。
在以后项目的功能基本实现后,回来翻看这部分内容,并以此对程序进行进一步的改进,有助于程序性能的进一步提升。