1、标记-清除算法
该算法分为“标记”和“清除”两个阶段,就是标记出所有需要回收的对象,在标记完成后统一回收即清除。缺点就是算法既耗时又消耗空间。
2、复制算法
该算法是将内存按容量划分为大小相等的两块,每次只使用其中一块。当这一块的内存用完时,就将还存活的对象复制到另一块上面,然后再把已使用过的存储空间一次清除。优点:效率高,实现简单;缺点:内存的可使用容量只剩原来的一半。
3、标记-整理算法
标记-整理算法就是标记出所有需要回收的对象,让所有存活的对象都向一端移动,然后清除这端边界以外的内存。缺点:有时会需要太多的复制操作,降低了效率。
4、分代收集算法
Java堆可以分为新生代和老年代。在新生代中,每次垃圾收集都会发现有大量对象死去,只有少量存活,所以选择复制算法。
而老年代因为对象存活率高,为了降低空间占有率,只能使用标记-清除算法或标记-整理算法。