Java虚拟机中的三种垃圾收集算法

1,标记-清除算法,分为标记和清除两个阶段,清除是指直接清除GC Roots不可达的对象,这种算法一是效率不高(标记和清除的效率都不高),二是会产生大量的内存碎片,在老年代中使用。

 

2,复制算法,该算法将内存分成大小相等的两块,每次都使用其中的一块,当这块内存用完,就将该区域还活着的对象复制到另一块中,然后将该区域全部清除,复制过去的对象占据的内存空间是连续的,但是这种算法使得原本的内存空间缩小一半,代价太高。现代商业虚拟机都是采用该种算法对新生代进行回收,但是内存的划分不是按照1:1进行划分,二是将内存划分为Eden和两块Survivor,大小为8:1,每次都保留一块survivor空间不使用,而由于新生代中的对象存活率较低(低于98%),所以正常情况下是可以保证预留的survivor可以放得下复制过来的存活对象。但是这种方式存在不确定性,这时就需要内存分配担保机制,需要注意的是,这些对象经过分配担保机制进入的是老年代。

 

3,标记-整理算法,该算法是对标记-清除算法的改进,将存活的对象都向一端移动,然后直接清除掉端边界以外的内存。

 

需要说明的是当代商业虚拟机都是采用分代收集算法,根据对象存活周期的不同,将内存分为新生代和老年代,根据各个年代的特点采用不同的算法。一般在新生代中采用复制算法,在老年代中采用标记-清除或者标记整理算法。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值