GC的4个算法

分代垃圾回收机制

不同的对象生命周期是不一样的,不同的生命周期的对象可以采取不同的回收算法, 以提高回收效率, 我们将对象分为三种状态: 年轻代, 年老代, 持久代. JVM将堆内存划分为Eden, Survivor, Tenured/Old空间

复制算法

年轻代(Eden)中采用的Minor GC 这种GC算法采用的复制算法, 所有新生的对象首先放在Eden区, 年轻代的目标就是尽可能快速的收集那些生命周期短的那些对象, Minor GC采用复制算法清理年轻代的内存, 可以频繁操作, 但是浪费内存空间, 当年轻代区域放满后就会将对象放到年老代区域中
1.抽象出一个转移过程
一旦发生GC 就是将10%的from和80%的eden中存活的对象转移到to去当中 接下来将90%除to区之外的空间全部释放
2.劣势
适用于存活率不高的情况 如果存活率很高 我们就要把所有的对象都复制一遍

浪费了内存
需要维护对象间的region的引用关系

标记清除

标记清除算法发生在老年代, 在年轻代中经历了N(默认是15)次垃圾回收仍然存活的对象会被放到年老代中, 因此我们可以认为年老代中存放的都是生命周期长的对象
1.思想
先将有效指引的对象标记,再清除未标记的对象

2.优点
相比复制算法来说不浪费内存

3.缺点
效率低(因为要遍历扫描2次),会产生内存碎片(清除后的内存是不连续的)

标记整理(压缩)

1.位置
发生在JVM虚拟机的老年代中
2.思想
将标记的对象连续的放到一端,将未标记的对象放到另一端,然后将未标记的对象清除
3.优点
与标记清除算法比,内存是连续的,与复制算法比不浪费内存
4.缺点
效率比复制算法低,需要多维持一个链表,用于使幸存的对象连续

引用计数法

给对象添加一个引用计数器,当有一个地方引用它时,计数器值就加1;当引用失效时,计数器就减1;任何时候计数器都为0的对象就是不可能再被使用的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值