【GC】垃圾回收算法

介绍

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

常见的回收算法

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

标记回收

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

图1. 表示多个变量在root下的引用情况.
【GC】垃圾回收算法_第1张图片

图2. 表示为能够从root节点有效访问到变量进行标记.
【GC】垃圾回收算法_第2张图片

图3. 表示回收没有被标记的变量空间,并且重置其它变量标记。
【GC】垃圾回收算法_第3张图片

步骤

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

备注

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

自动引用计数

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

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

相关文章

  • Mark-and-Sweep Garbage Collection
  • Mark-and-Sweep: Garbage Collection Algorithm
  • Automatic Reference Counting

你可能感兴趣的:(gc,算法)