JVM各類垃圾收集算法優劣
摘要:老年代:對象存活率高,沒有額外空間對它進行分配擔保,就必須使用”標記-清除“或”標記-整理“算法進行回收。過程與標記-清除算法一致,但後續不是直接對可回收對象進行清理,而是讓存貨的對象都向一端移動,然後直接清理掉端邊界以外的內存。
1、標記-清除算法
最基礎的垃圾收集算法,算法分爲“標記”和“清除”兩個階段:
首先標記處所有需要回收的對象,
其次在標記完成後統一進行回收被標記的對象
缺點:
1.標記和清除兩個過程的效率都不高
2.會產生大量的內存碎片(碎片太多可能會導致以後程序在運行過程中需要分配較大對象時,無法找到足夠連續內存而不得不提前出發另一次垃圾收集動作,週而復始,拖慢速度)
2、複製算法將可用內存分爲大小相等的兩塊,每次只使用其中的一塊,當這一塊內存用完了,就將存活着的對象複製到另外一塊上面,然後再把已使用過的內存空間一次性清理掉,現在的商用虛擬機都採用這種算法來回收新生代
優點:實現簡單,運行高效
缺點:每次將可用內存縮小爲原來的一半,代價略微高昂,不差錢就不成問題,其二爲對象存活率較高時機會進行較多的複製操作,效率會變低
3、標記-整理算法過程與標記-清除算法一致,但後續不是直接對可回收對象進行清理,而是讓存貨的對象都向一端移動,然後直接清理掉端邊界以外的內存
優點:解決內存碎片問題
缺點: 標記過程的效率不高
4、分代收集算法區分新生代和老年代,
新生代:每次垃圾收集時都發現有大批對象死去,只有少量存活,就選用複製算法,只需要付出少量存活對象的複製成本就可以完成收集
老年代:對象存活率高,沒有額外空間對它進行分配擔保,就必須使用”標記-清除“或”標記-整理“算法進行回收