首页 > 技术文章 > jvm--垃圾收集算法

wirr 2018-02-28 11:29 原文

1.标记-清除算法:分为标记清除两个阶段,首先标记出所有要回收的对象,在标记完成后,统一回收掉所有被标记的对象

<br><br/>

它主要有两个缺点:第一:标记和清除的过程效率都不高;第二:空间问题,标记清除后,会产生大量不连续的碎片,空间碎片太多,可能会导致,当程序运行过程中,需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作;

 

2.复制算法:将内存按容量分为2块大小相等的内存,每次只使用其中的一块,这中算法实现简单,运行高效;

 缺点:内存缩小一半,代价太高

 

 

 3.标记--整理算法:标记过程与“标记-清除一样”,只不过后续过程是让所有存活对象都像一端移动,然后直接清理掉端边界以外的内存;

 4.分代收集算法:java堆分为新生代和老年代,根据对象的生存周期,将内存分为几块,在新生代中,每次收集都有大量的对象死去,只需复制少量的存活对象,所以采用复制算法;

        老年代中,因为存活的效率高,没有额外空间对它进行分配,所以采用“标记-清理”或“标记-整理”算法;

 

 

推荐阅读