jvm4 jvm的垃圾回收算法

垃圾收集算法第一种:标记-清除算法

第一步:标记出所有需要回收的对象(类比删除:记录所有删除的数据)
第二步:在标记完成后统一回收被标记的对象(类比删除:数组没有多余内存存储数据时,全部清除)

缺点:
1.标记和清除效率都很低(时间问题);
2.会产生很多不连续的内存碎片(空间问题),导致以后需要较大内存时,无法找到足够的连续空间而不得不提前触发垃圾收集动作

垃圾收集算法第二种:复制算法(解决时间问题)

第一步:将可用内存按照容量划分为相等的两块;
第二步:每次只使用其中的一块A;
第三步:当使用的一块内存A用完了,就将还存活的对象复制到另外一块内存B上面;
第四步:原来使用的内存空间A一次清理掉。

缺点:
1.内存缩小了一半

应用场景:
回收新生代(只浪费了百分之十的内存):
第一步:将内存划分为Eden空间和两块较小的Survivor空间,HotSpot虚拟机是8:1;
第二步:每次只使用Eden空间和一块Survivor空间(A);
第三步:当使用的内存用完时,把所有存活着的对象复制到另外一块Survivor空间(B);
第四步:原来使用的内存空间A一次全部清理掉。

在第三步中,如果B空间不够用,需要依赖其他的内存(这里指老年代)进行分配担保
缺点:
1.当对象存活率较高的时候就需要进行较多的复制操作,效率将会变低
2.还要有额外的空间作为担保

垃圾收集算法第三种:标记-整理算法

第一步:标记出所有需要回收的对象;
第二步:将所有的存活对象都向一端移动;
第三步:直接清理掉端边界以外的内存。

垃圾收集算法第四种:分代收集算法(对复制算法的优化)

第一步:将Java堆分为新生代和老生代(根据对象存活周期的不同);
第二步:新生代中采用复制算法(新生代中对象存活率较低);
第三步:老生代中采用标记-清除或者标记-整理算法(老生代中对象存活率比较高,没有额外的空间对她进行分配担保)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值