JVM之回收

我们都知道jVM的垃圾回收主要在我们的heap区,那么java堆又分为青年代(Eden,S0,S1)和老年代(方法区的我们暂时不做考虑),为什么要分块呢?

首先,我们的对象产生的时候是存放在Eden中,然后JVM会在适当的时机进行GC,GC的回收算法的根据是“可达性分析算法”而不是“引用计数算法”,那么回收也有常用的两种算法“复制算法”和“标记治理算法”。
复制算法,首先将内存分为两块儿,每次只使用一块区域存储对象,GC的时候,是将那些“可达”的对象复制到第二块中,直接回收掉第一块中不可达的对象。这就是为什么会将青年代分为Eden和S的原因。
标记整理算法,首先标记处“不可达”的对象,移动他们的位置,时它们相邻,然后回收掉它们,这样就解决了回收碎片的问题。
然而,复制算法,有一个问题,就是,当S区不够装“可达”的对象是,就会出现问题,效率就会大大降低,那么这就产生的我们的“永久带”,不够装怎么办,那我们就另外开辟一块来备用,不够装的时候去将一部分对象转入老年代,那么我们的复制回收算法就一直是高效的。
然而,老年代没有多余的空间去转移对象了,那么“复制算法”就存在问题,那么就要使用“标记整理算法”。这也是“分代回收”算法的一种体现。
通过“分带回收”的想法,将是的GC保持比较高效的回收效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值