垃圾收集算法

    垃圾收集算法包括标记-清除复制算法标记-整理算法分代收集算法

1、标记-清除算法

       顾名思义,标记-清除算法分为标记、清除这两个阶段。首先标记需要回收的对象,标记完成后统一回收所有被标记的对象。

       不足之处:1、效率不高。标记和清除这两个效率都不高

                        2、造成大量的空间碎片。导致下次程序运行过程中需要为一个大对象分配空间时,无法找到足够的内存空间,                               从而触发下一次垃圾收集动作。


2、复制算法

     复制算法,就是将内存分为大小相等两块区域,每次只使用其中一块。当这块内存用完了,就将存活的对象复制到另一块上面。然后一次性的把已使用过的内存清理掉。提高了效率,也不用考虑内存碎片的情况。

     缺点:将内存缩小到了原来的一半。但其实新生代对象中98%的对象都是会被回收的,所以并不需要将内存按1:1的比例进行划分。而是将内存分为一块较大的Eden空间,两块较小的survivor空间,每次使用Eden,和其中一块survivor空间。回收时,将存活对象一次性复制到另一块survivor空间中。Hotspot虚拟机默认Eden和Survivor的大小比例时8:1。当Survivor空间不够时,就要将这些对象通过内存分配担保进入老年代。


3、标记-整理算法

      由于老年代的对象存活率较高,使用复制算法,复制时很可能空间不足,就需要额外的空间进行分配担保,效率将会变低。

      根据老年代的特点,就有了标记-整理算法,“标记”算法仍然和标记-清除一样,只是标记完不直接进行清除,而是将存活对象都往一端进行移动,然后清除端边界以外的内存。


4、分代收集算法

     现在商业的虚拟机垃圾收集都采用这种算法,虚拟机会根据对象存活周期的不同,将内存划分成几块,一般把java堆分为新生代和老年代。然后根据各个年代的特点选用不同的算法。新生代内次垃圾收集后存活的对象都比较少,适合复制算法。而老年代对象存活率高,就适合使用“标记-清除”或者“标记整理算法”。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值