这是我参与「第五届青训营」伴学笔记创作活动的第 5 天
一、重点内容
- 自动内存管理
- 编译器和静态分析
二、自动内存管理
相关概念
Mutator:业务线程,分配新对象,修改对象指向关系Collector:GC线程,找到存活对象,回收死亡对象的内存空间Serial GC:一个GC线程处理多个业务线程Parallel GC:支持多个GC线程同时回收处理多个业务线程Concurrent GC:支持GC线程和回收线程同时执行
自动内存管理
自动内存管理(Garbage collection),又称垃圾回收,处理的是由程序语言运行时系统管理动态内存,能够避免手动内存管理,专注于实现业务逻辑。
自动内存管理(GC)主要实现三个任务:
- 为新对象分配空间
- 找到存活对象
- 回收死亡对象的内存空间
GC算法之一:追踪垃圾回收
追踪垃圾回收是GC算法之一。通常垃圾被回收的条件是指针指向不可达的对象。
清理不可达对象采用几种策略:
Copying GC: 将存活对象复制到其他的内存空间Mark-sweep GC:将死亡对象的内存空间标记为可分配,设定free链路Mark-compact GC:移动并整理存活对象
具体选择何种策略,根据对象的特性而分。
分代GC(Generational GC):根据对象的年龄,制定不同的GC策略:
- 年轻对象:由于存活对象很少可以采用
Copying GC - 老年对象:可以采用
Mark-sweep GC
GC算法之二:引用计数
每个对象都有一个与之关联的引用数目,当引用书大于0时,可以判定对象存活。
三、编译器和静态分析
编译器的结构
- 分析部分(前端)
- 词法分析
- 语法分析
- 语义分析
- 中间代码生成
- 综合部分(后端)
- 代码优化
- 代码生成
静态分析
静态分析不执行代码,而是推导程序的行为,分析程序的性质。根据程序的控制流和数据流分析程序的性质
过程内分析和过程间分析
- 过程内分析:仅在函数内部进行分析
- 过程间分析:考虑过程调用时参数传递和返回值的数据流和控制流
四、个人总结
此课程的理论部分比较多,实践部分少,因此此笔记主要用来总结理论知识。