1,標記清除演算法
標記可**的記憶體,然後清除。
2,複製演算法。
使用標記清除演算法的過程中,如果**的記憶體很少這個演算法還是可以的,但是如果大量的記憶體都是需要**的,那這個就比較笨重,因為我們只需要保留少量不被**的記憶體就可以。這就衍生出了複製演算法。
3,標記整理演算法
使用標記清除演算法的過程中,會產生大量記憶體碎片,導致分配大物件時頻繁出現記憶體不足引發gc的問題,針對這個問題衍生出標記整理演算法,標記之後讓所有存活的物件都向一端移動,然後直接清理掉邊界以外的記憶體。
4,分代收集演算法
根據物件生存週期不同將記憶體分為年輕代和年老代,針對不同的年代使用不同的演算法。通常年輕代需要**的記憶體較多,存活物件較少,使用複製演算法比較合適,而年老代需要**的記憶體較少,使用標記清除或整理演算法比較合適。
JVM 垃圾收集演算法
這裡只是各個演算法的思想及發展過程 這是最基礎的收集演算法,分為兩個過程,標記和清除兩個階段。首先標記出需要 的物件,在標記完成後統一 掉所有被標記的物件。標記的過程就是之前判定物件的時候標記的。後續的演算法都是基於這種思路進行改進的。缺點呢,有兩個,1.效率問題,標記和清除的效率都不高。2.空間問...
JVM之垃圾收集演算法
標記清除演算法主要分為兩個階段,標記階段和清除階段,這兩個階段效率比較低,而且收集之後會產生記憶體碎片,無法為大的物件分配記憶體空間。如下圖 複製演算法解決了記憶體碎片問題,但是隨之而來的卻是把記憶體一分為二。原理是 記憶體一分為二,每次使用其中的一半,當需要 的時候,講死亡物件清理,然後存活物件移...
JVM 垃圾收集
1.引用計算法 給物件新增乙個引用計數器,每當有乙個地方引用它時,計數器值加一,當引用失效時,計數器值減一。當該物件的計數器值為0時,表明該物件不可用,虛擬機器可以對其進行 但是不能解決迴圈引用問題。2.可達性分析演算法 演算法思想為 以一系列的gc roots作為起點進行搜尋,搜尋走過的路徑稱之為...