垃圾收集算法

来源:互联网 发布:比较丧的日剧知乎 编辑:程序博客网 时间:2024/06/04 19:14

1.标记-清除算法

先标记处所有需要回收的对象,在标记完成之后统一回收所有被标记的对象。

主要两个不足:

(1)效率不高

(2)空间问题:标记清除后会禅城大量不连续的内存碎片,空间碎片太多可能会导致程序运行过程中需要分配较大对象时无法找到连续空间而提前触发垃圾收集动作。

2.复制算法

将内存容量分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将这一块内存中还存活的对象复制到另一块内存中,然后再把已经使用过的那块内存空间清理掉。实现简单,运行高效。

不足:将内存缩小为原来的一半,代价太高。

3.标记-整理算法

过程与标记-清除算法一样,但是后续步骤不是直接将对象回收清理,而是让所有存活对象都向一端移动,然后直接清理掉边界以外的内存。

4.分代收集算法

根据对象的存活周期将内存划分为几块。一般分为新生代和老年代,这样根据各个年代的特点采取适合的收集算法。新生代中,每次垃圾收集都有大量的对象死去,所以就采用复制算法;老年代中存活率高,那就采用标记清除或者标记整理算法来进行回收。

0 0