標記
首先標記出要**的物件(引用計數器為0或者引用鏈不可到達)。
清除
**標記的物件。
不足:
1:清除和標記兩個過程的效率都不高。
2:清除之後會產生大量不連續的空間碎片。導致後期經常執行gc操作。
做法:
將記憶體劃分為大小相同的兩個部分,每次只使用其中的一塊,當一塊記憶體用完了,就將還存活的物件複製到另乙份上面。然後再把已經使用過的記憶體一次清理掉。
eden和survivor區域
具體為什麼叫這個名字參考:
survivor一般有兩個,from survivor和to survivor。
eden : from survivor : to survivor =8 : 1 : 1;(hotspot jvm)
做法:
每次使用eden和其中乙個survivor,當**時將其中還存活的物件一次性複製到另乙個survivor中。最後清理掉eden和剛剛使用過的survivor。
圖示:
老年代的存活率較高,不適合使用複製收集演算法。
做法:
1:標記可以**的物件
2:將所有的存活的物件都向一端移動。
3:清理掉邊界以外的記憶體
做法:
根據物件存活週期將不同的堆記憶體分成幾塊:新生代和老年代。
根據不同代的特點採用不同的演算法;代演算法
原因新生代
複製演算法
存活的物件較少,額外空間多
老年代標記-整理,標記清理
物件存活率告,沒有額外空間分配
垃圾收集演算法
首先標記出所有需要 的物件,在標記完成後統一 所有被標記的物件 將可用記憶體按容量劃分為大小相等的兩塊,每次只使用其中的一塊。當這一塊的記憶體用完了,就將還存活著的物件複製到另外一塊上面,然後再把已使用過的記憶體空間一次清理掉。這樣使得每次都是對整個半區進行記憶體 記憶體分配時也就不用考慮記憶體碎片...
垃圾收集演算法
一.標記 清除演算法 分為 標記 和 清除 兩個階段 方案 1.標記所有需要 的物件 2.統一 被標記的物件 缺點 1.效率問題,標記 和 清除 效率都不高 2.空間問題,被 清除 後會產生大量的不連續的記憶體碎片 當大物件找不到足夠的連續空間,就得提前gc 二.複製演算法 方案 將記憶體分為兩塊,...
JVM 垃圾收集演算法
這裡只是各個演算法的思想及發展過程 這是最基礎的收集演算法,分為兩個過程,標記和清除兩個階段。首先標記出需要 的物件,在標記完成後統一 掉所有被標記的物件。標記的過程就是之前判定物件的時候標記的。後續的演算法都是基於這種思路進行改進的。缺點呢,有兩個,1.效率問題,標記和清除的效率都不高。2.空間問...