垃圾回收算法

1.    标记-清除算法

首先标记出所有需要回收的对象,标记完成后统一回收所有标记对象。

该算法是最基础的回收算法。主要问题是:标记和清除的效率不高;标记清除后会产生大量不连续内存碎片,以至于程序要分配大内存时无法找到足够的连续内存,从而不得不提前触发下一次垃圾清理。

2.    复制算法

将内存划分为容量相等的两块。每次只使用一块。当内存1用完时,就把所有活着的对象顺序复制到内存2上,然后对内存1进行一次全面清理。这样每次都是对整个半区的内存进行回收,也不用考虑内存碎片。

相比于原来的标记-清除法,效率高,无碎片。但是将可用内存缩小为原来的一半,代价较高。

新生代堆中的对象98%都是快速死亡的。一种改进算法是将内存划分为三块,一块较大的Eden控件和两块较小的Survivor空间。每次使用Eden和一块Survivor。当回收时,将Eden和Survivor中还存活的对象一次性地复制到另一块Survivor空间中,然后将Eden和用过的Survivor清理掉。HotSpot默认Eden和Survivor比例是8:1,所以每次可用内存是原来的90%。

若Survivor和Eden中对象较多,一块Survivor无法容纳,那么就会依赖其他内存(老年代)进行分配担保。

3.    标记-整理算法

首先标记出所有需要回收的对象,然后将所有存活对象向同一端移动,最后清理掉边界外的内存。

4.    分代收集算法

将内存划分为几块,通常是新生代堆和老年代堆两块。然后根据各代的特点选择合适的收集算法。

通常来说,新生代死亡率高,所以适合用复制算法;老年代存活率高,且没有额外空间进行分配担保,所以通常使用“标记-清理”或“标记-整理”算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值