JVM垃圾回收算法

标记-清除算法

标记:前面blog提到的二次标记
清除:回收所有被标记的对象清除。
优点:算法简单
缺点:效率不搞,标记和清除两个阶段效率都不高;碎片问题,清除阶段会产生大量的内存碎片,即使有足够的空间但是不连续,还会出发垃圾回收。

复制算法

将可用内存分为大小相等的两块,每次只使用其中一块,当正在使用的一块内存不足出发GC后,将存活的对象复制到未使用的一块,然后将之前使用的一块内存全部清除掉。
缺点:可用内存变为原来的一般,代价高,较多复制效率低。
优点:不会产生内存碎片。
现在多用在分代收集回收算法的年轻代GC的垃圾回收中。Eden和Suivivor,Survivor又分为,From Survivor和To Survivior。一次回收之后,将Eden和Survivor(正在使用)仍然存活的对象复制到另一块未使用的Survivor。若,Survivor分配不下,启用分配担保,直接进入Old区。合理设置Survivor的大小,避免过多对象进入老年代,触发Full GC。

标记-整理算法

标记:二次标记。
整理:让所有存活的对象都向一端移动,然后清除掉边界以外的内存。
JVM中老年代GC一般采用的回收算法。

分代收集算法

根据对象的存活周期,将对象划分为年轻代和老年代。
年轻代:JVM分配对象内存时先将对象分配到年轻代,年轻代中的对象在一次Minor GC后大量对象死去,只有少数对象存活,只需标记出部分存活对象,然后采用复制算法。
老年代:老年代中的额对象一般存活时间比较长,没有额外的空间进行分配担保,那么就采用标记清除或者标记整理算法。

分代收集算法是目前JVM使用的主流垃圾回收算法,同时也是前面三个算法结合对象的生命周期长短不一的情况提出的改进方案。核心手机算法还是前面三个。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值