这是我参与「第五届青训营 」笔记创作活动的第七天。
一、课程主要内容
- 自动内存管理
二、课程具体内容
1.动态内存的概念
1.1动态内存
程序在运行时根据需求动态分配的内存:galloc()—— 需要时分配,不需要时回收。
1.2自动内存管理
由程序语言的运行时系统管理动态内存的回收,这样做可以避免手动管理内存,专注于业务逻辑地实现,同时保证内存的使用具有正确性与安全性。
1.3内存管理的三个任务
- 为新对象分配空间
- 找到存活对象
- 回收死亡对象的内存空间
相关概念
- Mutator:业务线程,分配新对象,修改对象的指定关系。
- Collector:GC线程,找到存活对象,回收死亡对象的内存空间
- Serial GC:只有一个collector
- Parallel GC:支持多个collector GC同时回收的GC算法
- Concurrent GC:Mutators和Collector可以同时运行的GC算法。
评价GC算法的几个标准:
- 安全性:指垃圾回收器不应该回收存活的对象
- 吞吐率:1-垃圾回收器花在GC上时间的总比率
- 暂停时间:指垃圾回收导致业务线程挂起的时间
- 内存开销:指垃圾回收器元数据占用的内存开销
分代GC
- 对象的年龄:该对象经历GC的次数
- 目的:对于不同年龄的对象,制定不同的GC策略,降低内存管理的整体开销
追踪垃圾回收
对象被回收的条件:指针指向关系不可达的对象
- 标记根对象:静态变量、常量、全局变量、线程栈等
- 从根对象,标记所有可达对象
- 清理所有不可达对象: 1.将存活对象复制到另外的内存空间 2.将死亡对象的内存标记为可分配 3.移动并整理存活对象