垃圾回收的常见方式

2021-09-27  本文已影响0人  taobao

引用计数

  1. 引用计数通过在对象上增加自己被引用的次数,被其它对象引用时加1,应用自己的对象被回收时减1,引用计数为0时,对象即可回收,
    使用比较广泛,包括:ios cocoa框架,php,python等
  2. 优点:方式简单,回收速度快
  3. 缺点:

标记-清除

  1. 该方法分为两步:
  1. 优点:解决了引用计数方式的不足
  2. 缺点:每次垃圾回收,都会暂停当前正在执行的程序,垃圾回收时系统响应能力降低

复制收集

  1. 复制收集只需要遍历一次,准备一个新空间,从根开始,对对象进行扫描,如果存在这个对象的引用,就把它复制到新空间,一次扫描后,所有不存在新空间的对象,都是可以回收的垃圾对象

标记清除和复制收集对比

  1. 标记清楚 节省内存,但是需要两次遍历,对于回收垃圾占比小的情况比较合适;
  2. 复制收集更快速需要开辟额外空间,对于垃圾占比比较大的情况下比较占优

分代收集

  1. 这种方式使用了程序的一种特性,大部分对象会从产生开始后,在很短时间内变为垃圾对象,而存在很长时间的对象往往有较长的时间周期
  2. 根据对象存活周期不同划分为新生代和老生代,存活周期短的为新生代,存活周期长的为老生代,
  3. 新创建的对象,被称为生代,高频对新生成的对象回收,称为小回收,低频的对老生代的回收,称为大回收,每次小回收后把存活下来的对象归为老生代,小回收的时候直接跳过老生代,

三色标记法

  1. 起初把所有对象标记为白色
  2. 从根出发,扫描所有可达的对象,标记为灰色,放入待处理队列
  3. 从队列取出灰色对象,将其引用对象标记为灰色放入队列,自身标记为黑色
  4. 重复3,直到灰色对象队列为空,此时白色对象即为可以回收的垃圾对象
上一篇下一篇

猜你喜欢

热点阅读