《深入理解java虚拟机》3.3之垃圾回收算法

3.3 jvm的垃圾回收算法大致分为3种

 

 

3.3.1标记清除算法

基本过程:分为标记和清除两部分,首先通过一次标记,标记完成后统一进行清除操作。

优点:算法足够简单,很容易实现

缺点:标记和清除的效率都不高,

          会产生大量的碎片

如下图所示

 

 

-------------华丽的分割线----------------

 

3.3.2复制算法

 

把内存一分为二,一次只使用一部分,当一般的内存使用完了,就进行一次复制,把这部分内存的对象都copy到另一半内存中,然后将另一半全部清除掉

优点:执行效率高,不用考虑碎片化问题

缺点:硬件代价大,一次值使用内存的一半

如下图所示

 

 

关于复制算法的一些补充

 

这种算法一半用于回收新生代,但是并不是使用50%的内存,hotspot虚拟

机采用一个Eden和2个Survivor来做复制,大小比为 Eden:Survivor1: Survivor2=8:1:1

一次使用Eden和一个Survivor,当空间使用完毕后就把这些存活的对象拷贝到另一个Survivor中,即一半情况下90%的对象中只有不到10%的对象存活,这也是新生代的特点,对象都是朝生夕死的,如果90%的对象中存活的大于10%时就要把存活的对象放入其他的内存区域,这里指老年代

 

-------------华丽的分割线----------------

 

 

 

 

3.3.3标记整理算法

 

和标记清除算法类似,但是标记完不是清除而是把对象逐个的向前移动,做个整理,最后把最后一个存活的对象后面的内存全部清除

优点:实现简单,没有内存碎片问题

缺点:标记步骤效率不高

 

和复制算法相比,都不存在碎片问题,但是内存利用率大大提高

如下图所示

 

 

 

-------------华丽的分割线----------------

 

3.3.4分代算法

即对不同的区域采用不同的算法,例如对新生代采用复制算法,因为这个区域的对象朝生夕死

 

对老年代采用标记清除或标记整理算法,因为这个区域没有内存担保

分代算法也是现代商业虚拟机采用的算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值