一共有4中垃圾收集算法:标记清除算法、复制算法、标记整理算法、分代收集算法。
标记清除算法
标记清除算法:这是最基础的收集算法。分为标记和清除两个阶段。首先需要标记出需要回收的对象,标记完成后统一回收。
不足:1.标记和清除两个阶段效率都不高。2.会产生大量不连续的内存碎片。
复制算法
复制算法:为了解决效率问题,复制算法将内存划分为大小相等的两块,每次只使用其中的一块,这块用完后将活着的对象复制到另一块上,再把使用过的内存空间一次清除掉。
不足:老年代存活率高,大批量地复制效率就低了,而且将老年代分成两块,实际使用只剩一半肯定不合适。
标记整理算法
标记整理算法:标记整理算法可以解决上面的不足。将存活的对象标记并向一端移动。然后直接清理边界以外的内容。
分代收集算法
分代收集算法:根据对象存活周期不同将内存划分并采用不同的垃圾回收算法。一般将堆分为新生代和老年代。新生代中死多活少,选用复制算法,老年代死少活多,选用标记清除算法或标记整理算法进行回收。