1

介绍

程序里, 对于堆(Heap)的内存空间管理, 是需要额外分配以及释放。在一些语言中, 会有对应的算法, 计时器进行自动分配及释放。

常见的回收算法

  • 标志回收(mark-and-sweep)
  • 自动引用计数(automatic reference counting)

标记回收

核心: 能够从根(root) 作用域开始访问的变量和对象都会打上 mark 标记. 触发垃圾回收器定时,循环所有的变量地址,如果不存在被标记,则会被回收。

图1. 表示多个变量在root下的引用情况.
变量引用初期

图2. 表示为能够从root节点有效访问到变量进行标记.
变量引用标记

图3. 表示回收没有被标记的变量空间,并且重置其它变量标记。
未引用变量回收

步骤

  1. 对有效的变量进行标记
  2. 回收未标记的变量
  3. 重置有效的变量标记

备注

  1. 无线循环引用直接回收 (优点)
  2. 执行算法中不会产生额外开销 (优点)
  3. 在垃圾收集算法运行时暂停正常程序执行 (缺点)
  4. 回收内存后,其它变量之间会产生内存碎片 (缺点)

自动引用计数

IOS开发的 ObJect-C 语言采用此方法进行垃圾回收

每个对象都会对指向自己的指针进行技数. 当引用数为0的时候, 则认为不需要该对象. 则会被进行回收

相关文章


wayneli
1.4k 声望828 粉丝

2017-2018年目标