JVM 垃圾收集演算法

2021-09-29 01:29:48 字數 645 閱讀 3889

這裡只是各個演算法的思想及發展過程

這是最基礎的收集演算法,分為兩個過程,標記和清除兩個階段。首先標記出需要**的物件,在標記完成後統一**掉所有被標記的物件。標記的過程就是之前判定物件的時候標記的。後續的演算法都是基於這種思路進行改進的。

缺點呢,有兩個,1.效率問題,標記和清除的效率都不高。

2.空間問題,標記清除後會產生大量不連續的記憶體碎片。

為解決效率問題,一種叫做「複製」的收集演算法出現了。將可用記憶體按容量分為大小相等的兩塊,每次只使用其中的一塊,當這一塊的記憶體用完了,就將存活的物件複製到另外一塊去,然後再把已使用過的記憶體空間一次清理掉。

一般情況下這種演算法應用在**新生代,研究表明新生代中的物件時98%存活時間短,所以並不需要按照1:1的空間來分配記憶體,而是將記憶體分為一塊eden區和兩塊較小的survivor區,比例是8:1,只有10%是拿來備用的,所以浪費的比較小。如果這10%不夠用,那麼就需要依賴老年代了。

複製收集演算法在存活率較高的老年代情況下是不合適的的,因為效率將會變低,更關鍵的是複製演算法那50%需要預留出來的空間。所以便生成一種「標記-整理」收集演算法。先標記,然後將存活的向一端移動,然後直接清理掉邊界外的記憶體。

分代收集演算法並沒有什麼新的思想,就是將前三種方法結合使用。

新生代用複製演算法。老年代用標記-清除 或者 標記-整理演算法。

JVM之垃圾收集演算法

標記清除演算法主要分為兩個階段,標記階段和清除階段,這兩個階段效率比較低,而且收集之後會產生記憶體碎片,無法為大的物件分配記憶體空間。如下圖 複製演算法解決了記憶體碎片問題,但是隨之而來的卻是把記憶體一分為二。原理是 記憶體一分為二,每次使用其中的一半,當需要 的時候,講死亡物件清理,然後存活物件移...

jvm垃圾收集演算法整理

1,標記清除演算法 標記可 的記憶體,然後清除。2,複製演算法。使用標記清除演算法的過程中,如果 的記憶體很少這個演算法還是可以的,但是如果大量的記憶體都是需要 的,那這個就比較笨重,因為我們只需要保留少量不被 的記憶體就可以。這就衍生出了複製演算法。3,標記整理演算法 使用標記清除演算法的過程中,...

JVM 垃圾收集

1.引用計算法 給物件新增乙個引用計數器,每當有乙個地方引用它時,計數器值加一,當引用失效時,計數器值減一。當該物件的計數器值為0時,表明該物件不可用,虛擬機器可以對其進行 但是不能解決迴圈引用問題。2.可達性分析演算法 演算法思想為 以一系列的gc roots作為起點進行搜尋,搜尋走過的路徑稱之為...