標記清除演算法主要分為兩個階段,標記階段和清除階段,這兩個階段效率比較低,而且收集之後會產生記憶體碎片,無法為大的物件分配記憶體空間。
如下圖:
複製演算法解決了記憶體碎片問題,但是隨之而來的卻是把記憶體一分為二。原理是:記憶體一分為二,每次使用其中的一半,當需要**的時候,講死亡物件清理,然後存活物件移動到另外一邊,這樣避免了記憶體碎片的產生。
當然,在現在的商業虛擬機器來看,並不需要將記憶體一分為二,這樣代價也太大啦。98%的物件都是朝生夕死,hotspot將記憶體分為新生代和老年代。新生代分為eden,from suvivor,to survivor. eden和survivor的預設大小是8:1. 也就是新生代**佔整個新生代的記憶體的90%.
標記整理演算法是將存活的物件向一端移動,然後清理邊界以外的記憶體。主要用於老年代收集。
新生代使用複製演算法就可以複製少量物件到其中的乙個survivor。老年代使用的標記整理法來收集。
JVM 垃圾收集演算法
這裡只是各個演算法的思想及發展過程 這是最基礎的收集演算法,分為兩個過程,標記和清除兩個階段。首先標記出需要 的物件,在標記完成後統一 掉所有被標記的物件。標記的過程就是之前判定物件的時候標記的。後續的演算法都是基於這種思路進行改進的。缺點呢,有兩個,1.效率問題,標記和清除的效率都不高。2.空間問...
jvm垃圾收集演算法整理
1,標記清除演算法 標記可 的記憶體,然後清除。2,複製演算法。使用標記清除演算法的過程中,如果 的記憶體很少這個演算法還是可以的,但是如果大量的記憶體都是需要 的,那這個就比較笨重,因為我們只需要保留少量不被 的記憶體就可以。這就衍生出了複製演算法。3,標記整理演算法 使用標記清除演算法的過程中,...
JVM 垃圾收集
1.引用計算法 給物件新增乙個引用計數器,每當有乙個地方引用它時,計數器值加一,當引用失效時,計數器值減一。當該物件的計數器值為0時,表明該物件不可用,虛擬機器可以對其進行 但是不能解決迴圈引用問題。2.可達性分析演算法 演算法思想為 以一系列的gc roots作為起點進行搜尋,搜尋走過的路徑稱之為...