1.標記-清除算法:
(1)原理:首先標記出所有需要回收的對象,在標記完成後統一回收所有被標記的對象
(2)算法示意圖:
(3)缺點:標記和清除這倆個效率不高,標記清除後會產生大量不連續的內存碎片,在對象分配很大內容的時候,
就找不到足夠的連續內容,使的提前出發一次垃圾回收
2.複製算法:
(1)原理:將內存按容量分爲大小相同的倆塊,每次只使用其中的一塊,當內存使用完後,將所有存活的對象複製
到另一塊內存,然後將已使用的內容一次性清除
(2)算法示意圖:
(3)缺點:將內存縮小爲原來的一半(如果不需要浪費還需要額外的空間進行擔保),對象存活率較高時需要進行較多
的複製
(4)使用場景:這種算法一般用於新生代對象的回收,一般將內存分爲一塊較大的Eden和倆塊較小的Survivor,每次使用
Eden和一塊Survivor,在內存回收時將這倆塊存活的對象複製到另一塊Survivor上,清理掉所有用過的內存,HotSpot
虛擬機的Eden和Survivor的分配比例爲8:1,所以新生代佔用的內存爲90%,我們無法保證每次回收完存活的對象都是
10%,當Survivor不夠用時,只能依賴其它內存(這裏指老年代)進行分配
3.標記-整理算法:
(1)先對需要回收的對象進行標記,讓所有存活的對象向一端移,然後直接清理掉邊界以外的內存
(2)算法示意圖:
(3)使用場景:適合老年代垃圾回收
4.分代收集算法:
(1)原理:將堆分爲新生代和老年代,根據所分的代採用不同的收集算法
(2)新生代特點:每次收集都會有大批的對象死去,只有少量的存活,所以適合採用複製算法
(3)老年代特點:對象存活率高,沒有額外的空間爲其擔保,標記-整理算法