这是我参与「第五届青训营 」伴学笔记创作活动的第4 天
一、内容:
1.自动内存管理
动态内存
程序在运行时根据需求动态分配的内存:malloc()
自动内存管理(垃圾回收):由程序语言的运行时系统回收动态内存
避免手动内存管理,专注于实现业务逻辑
保证内存使用的正确性和安全性
三个任务
为新对象分配内存
找到存活对象
回收死亡对象的内存空间
追踪垃圾回收
引用计数
分代GC
清理策略
copying GC:将对象复制到另外的内存空间
Compact GC:原地整理对象
Mark sweep GC:使用free list管理空间
2.Go内存分配及管理
目标:为对象在heap上分配内存
提前将内存分块
调用系统调用mmap()向os申请一大块内存
先将内存划分成大块
再将大块继续划分为特定大小的小块,用于对象分配
noscan mspan:分配不包含指针对象——GC不需要扫描
scan mspan分配包含指针对象——GC需要扫描
分配对象:根据对象大小,选择合适的块返回
3.Banlance GC
4.编译器和静态分析
静态分析:不执行程序代码,推导程序行为,分析程序性质。
控制流:程序执行的流程
数据流:数据在程序上的传递
通过分析控制流和数据流,我们可以知道更多关于程序的性质
函数内联
逃逸分析
Beast Mode
二、课后个人总结:
本节课在Go 内存分配和编译器相关知识展开,讲解了现有的内存分配与编译器策略以及他们存在的缺点,并且给出了字节的解决方案,优化的思路,让我对内存分配和编译器的知识和优化过程有了深入的认识。