GC垃圾回收算法

目录

GC的概念

GC垃圾回收流程

GC的算法

GC算法的比较


GC的概念

垃圾回收机制是一种自动的回收机制,它回收的内容位于方法区和堆内存中 

我们知道堆中包括新生代、幸存区(from,to)、老年代、元空间。GC回收大部分都是新生代。

GC垃圾回收流程

这里我们再来回顾下GC的流程,第一次的垃圾回收会在Eden区做处理,存活下来的进入到幸存区,此时Eden区被清空。幸存区from和to的区分标准是谁空谁是to。第二次垃圾回收会把Eden区存活的对象放到to中,From上次保存的对象也放到to中。到此原来的from变成to,原来的to变成from。

默认情况下当一个对象经历了15次GC都没有死,就会进入到养老区。也可以通过-XX:MaxTenuringThreshold参数来调节这个参数

GC的算法

  • 引用计数法 

它会给堆中的每个对象计数。最少使用次数的对象会先被GC回收

这种算法jvm中用的非常少了,因为每一个对象都有一个记数器,对象多了非常影响性能

  • 复制算法

复制算法用于对象存活度低的新生区,它的含义是GC时伊甸区的内容给了幸存区,幸存区的to和from对象交换的原理。

它的好处是GC到幸存区后空间一份为二,from,要么to。没有内存碎片

它的坏处是极端情况下,对象100%存活,始终有一半的to空间是无法存储对象的。浪费了内存空间

  • 标记清除法

复制算法会出现空间浪费的情况,标记清除法试图解决这个问题。标记的过程其实就是,遍历所有的GC Roots,然后将所有的 GC Roots可达的对象标记为存活的对象。

它的优点是:不需要额外的空间

它的缺点是:两次扫描会浪费时间,并且对一个个无序的小块标记,中间会产生内存碎片

  • 标记整理法

压缩法在清除法的基础上又进行了一次扫描,把存活的对象进行了排序,解决了内存碎片问题,但多扫描一次增加了时间成本

GC算法的比较

内存效率(时间复杂度):复制算法>标记清除算法>标记压缩算法

内存整齐度:复制算法 = 标记压缩算法>标记清除算法

内存利用率:标记压缩算法>标记清除算法>复制算法

总结:GC是一个分代的垃圾回收机制,年轻代存活率低时候用复制算法,老年代存活率高适合于标记清除算法+标记压缩算法

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值