垃圾收集算法

目录

 

一、标记-清除算法

二、复制算法

三、标记-整理算法

四、分代算法


一、标记-清除算法

最基础的算法。如名称一致,分为两个阶段:标记、清除。先标记需要回收的对象,然后对标记的对象进行回收

示意图

回收之前

 

回收之后

缺点:1、效率问题:标记和清除的效率都不高

           2、空间问题:当把对象回收后,会造成大量的不连续内存碎片,当有大对象创建并找不到连续的足够大的内存时,会重新触发GC动作。

二、复制算法

复制算法是将内存分为两块大小相等的空间,每次使用时只使用其中一块,回收对象时,将存活的对象复制到另一块空间中,然后把当前空间一次清除。

示意图:

回收之前

回收之后

缺点:1、当对象存活率高时,需要复制的对象过多会造成效率低    2、内存只能使用一半,代价太高

实际使用中,内存空间不是按照1:1的比例进行分配。而是分成一个较大的Eden和两个较小的Survivor区域。每次使用Eden和其中一个Survivor区域。每次回收时将Eden和Survivor中存活的对象一次复制到另一个没有使用的Survivor区域中。然后将Eden和原先使用的Survivor区域清理掉。Eden和Survivor区域的大小比例为8:1,每次使用90%(80%+10%),另外10%保留。当Survivor空间不够用时,会使用老年代分配担保。

 

三、标记-整理算法

因为复制算法的第一个缺点(例:老年代),出现了标记-整理算法。

标记-整理算法也分为两步:

1、标记需要回收的对象

2、将存活的对象向一端移动,然后清理掉边界以外的内存。

示意图

回收前

回收后

 

四、分代算法

当前商用虚拟机采用的算法

根据对象存活周期的不同将内存分成几块。一般分为新生代和老年代。可以根据不同的区域特点使用不同的回收算法。新生代每次有大量对象需要回收,存活的较少,因此采用复制算法。老年代存活对象多,每次回收的对象较少,采用标记-整理算法。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值