介绍
程序里, 对于堆(Heap)的内存空间管理, 是需要额外分配以及释放。在一些语言中, 会有对应的算法, 计时器进行自动分配及释放。
常见的回收算法
- 标志回收(mark-and-sweep)
- 自动引用计数(automatic reference counting)
标记回收
核心: 能够从根(root) 作用域开始访问的变量和对象都会打上
mark
标记. 触发垃圾回收器定时,循环所有的变量地址,如果不存在被标记,则会被回收。
图1. 表示多个变量在root下的引用情况.
图2. 表示为能够从root节点有效访问到变量进行标记.
图3. 表示回收没有被标记的变量空间,并且重置其它变量标记。
步骤
- 对有效的变量进行标记
- 回收未标记的变量
- 重置有效的变量标记
备注
- 无线循环引用直接回收 (优点)
- 执行算法中不会产生额外开销 (优点)
- 在垃圾收集算法运行时暂停正常程序执行 (缺点)
- 回收内存后,其它变量之间会产生内存碎片 (缺点)
自动引用计数
IOS开发的 ObJect-C
语言采用此方法进行垃圾回收
每个对象都会对指向自己的指针进行技数. 当引用数为0的时候, 则认为不需要该对象. 则会被进行回收
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。