摘要:老年代:對象存活率高,沒有額外空間對它進行分配擔保,就必須使用”標記-清除“或”標記-整理“算法進行回收。過程與標記-清除算法一致,但後續不是直接對可回收對象進行清理,而是讓存貨的對象都向一端移動,然後直接清理掉端邊界以外的內存。

1、標記-清除算法

最基礎的垃圾收集算法,算法分爲“標記”和“清除”兩個階段:

首先標記處所有需要回收的對象,

其次在標記完成後統一進行回收被標記的對象

JVM各類垃圾收集算法優劣

標記-清除

缺點:

1.標記和清除兩個過程的效率都不高

2.會產生大量的內存碎片(碎片太多可能會導致以後程序在運行過程中需要分配較大對象時,無法找到足夠連續內存而不得不提前出發另一次垃圾收集動作,週而復始,拖慢速度)

2、複製算法

將可用內存分爲大小相等的兩塊,每次只使用其中的一塊,當這一塊內存用完了,就將存活着的對象複製到另外一塊上面,然後再把已使用過的內存空間一次性清理掉,現在的商用虛擬機都採用這種算法來回收新生代

優點:實現簡單,運行高效

缺點:每次將可用內存縮小爲原來的一半,代價略微高昂,不差錢就不成問題,其二爲對象存活率較高時機會進行較多的複製操作,效率會變低

JVM各類垃圾收集算法優劣

複製算法

3、標記-整理算法

過程與標記-清除算法一致,但後續不是直接對可回收對象進行清理,而是讓存貨的對象都向一端移動,然後直接清理掉端邊界以外的內存

優點:解決內存碎片問題

缺點: 標記過程的效率不高

4、分代收集算法

區分新生代和老年代,

新生代:每次垃圾收集時都發現有大批對象死去,只有少量存活,就選用複製算法,只需要付出少量存活對象的複製成本就可以完成收集

老年代:對象存活率高,沒有額外空間對它進行分配擔保,就必須使用”標記-清除“或”標記-整理“算法進行回收

相關文章