1.標記清除算法
該算法先標記,后清除,將所有需要回收的算法進行標記,然后清除;這種算法的缺點是:效率比較低;標記清除后會出現大量不連續的內存碎片,這些碎片太多可能會使存儲大對象會觸發GC回收,造成內存浪費以及時間的消耗。
2.復制算法
復制算法將可用的內存分成兩份,每次使用其中一塊,當這塊回收之后把未回收的復制到另一塊內存中,然后把使用的清除。這種算法運行簡單,解決了標記-清除算法的碎片問題,但是這種算法代價過高,需要將可用內存縮小一半,對象存活率較高時,需要持續的復制工作,效率比較低。
3.標記整理算法
標記整理算法是針對復制算法在對象存活率較高時持續復制導致效率較低的缺點進行改進的,該算法是在標記-清除算法基礎上,不直接清理,而是使存活對象往一端游走,然后清除一端邊界以外的內存,這樣既可以避免不連續空間出現,還可以避免對象存活率較高時的持續復制。這種算法可以避免100%對象存活的極端狀況,因此老年代不能直接使用該算法。
4.分代收集算法
分代收集算法就是目前虛擬機使用的回收算法,它解決了標記整理不適用于老年代的問題,將內存分為各個年代,在不同年代使用不同的算法,從而使用最合適的算法,新生代存活率低,可以使用復制算法。而老年代對象存活率搞,沒有額外空間對它進行分配擔保,所以只能使用標記清除或者標記整理算法。