1、标记-清除算法
首先标记出所有需要回收的对象,然后统一回收
缺点:(1)标记和清除过程效率都不高 (2)会产生不连续的内存碎片
2、复制算法
将内存划分为大小相等的两块,每次只用其中一块,当这块内存用完时,就将该内存上存活的对象复制到另一块上面,然后把使用过的内存一次清理掉
优点: 简单高效、不会产生内存碎片
缺点:内存使用率低(只能使用一半),持续复制长生存期的对象导致效率低
3、标记-整理算法
首先标记出所有存活的对象,然后将存活的对象往内存的一端移动,最后将端边界以外的内存清理掉
4、分代收集算法
将java堆分为新生代和老年代,各个年代选择自己合适的收集算法
新生代:大批对象存活时间短,选择复制算法
老年代:对象存活率高,使用标记-清理或标记-整理