垃圾收集算法

常见的垃圾回收算法有如下几种:

  • 标记清除算法
  • 复制回收算法
  • 标记整理算法
  • 分代回收算法

其它的一些算法都是根据这几个算法演变而来的,我们来一个一个的看

准备知识:如何判断一个对象是否应该被回收

标记清除算法

标记回收算法分为标记和清除两个部分,把需要回收的对象标记,在标记完成之后把标记对象清除(一般而言,只有连续标记几次之后,对象才会被清除)

标记清除算法实现简单,但是效率比较低,而且会产生大量的不连续空间

复制回收算法

复制回收算法是把空间分成两个部分,每次只使用其中的一个部分,然后在发生回收的时候,把存活的对象放到那个空闲的空间,然后把原先使用的那部分空间内的所有对象全部删除。

这种方式效率比较高,并且不会产生碎片空间,但是空间的利用率不高,典型的空间换时间的思想

标记整理算法

标记整理算法和标记清除算法在前一部分是一样的,但是在进行回收之后,他会把存活对象都往一段移动,把不连续空间重新变成连续空间

因为最后牵涉到需要整理空间,所以标记整理算法的效率是最低的,但是他也不会产生碎片空间

分代回收算法

分代回收算法其实是用上述算法组合而成的,与其说是一种算法,还不如说是一种设计思想

据调查,大约有98%的对象符合朝生夕死的特点,也就是说一个对象在创建之后的一段时间内,有非常大的概率是可以被回收的,分代回收算法利用这个特性,把空间分为了新生代和老年代,对象分配在新生代,采用复制回收算法(比如说JVM里面就把新生代分为edan区和两个survival,他们的比例是8:1:1,每次使用一个edan区和一个survival区,需要进行回收的时候,把幸存对象放入另一个survival区,然后正在使用的survival区和edan全部回收,之后使用edan区和有幸存对象的survival区),当一个对象经历过多次回收而没有回收掉时,我们就有理由认为,他是不容易回收的,于是就可以把它放入老年区,老年区使用标记整理算法,但是当发生Full GC时会使用标记整理算法来处理碎片空间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值