首先標記出所有需要**的物件,在標記完成後統一**所有被標記的物件
將可用記憶體按容量劃分為大小相等的兩塊,每次只使用其中的一塊。當這一塊的記憶體用完了,就將還存活著的物件複製到另外一塊上面,然後再把已使用過的記憶體空間一次清理掉。這樣使得每次都是對整個半區進行記憶體**,記憶體分配時也就不用考慮記憶體碎片等複雜情況,只要移動堆頂指標,按順序分配記憶體即可。
現代主流虛擬機器採用eden:survivor:survivor= 8:1:1來劃分新生代記憶體空間,當**時,將eden和survivor中還存活著的物件一次性地複製到另外一塊survivor空間上,最後清理掉eden和剛才用過的survivor空間。
標記過程仍然與標記清除演算法一樣,但後續步驟不是直接對可**物件進行清理,而是讓所有存活的物件都向一端移動,然後直接清理掉邊界以外的記憶體。
垃圾收集演算法
一.標記 清除演算法 分為 標記 和 清除 兩個階段 方案 1.標記所有需要 的物件 2.統一 被標記的物件 缺點 1.效率問題,標記 和 清除 效率都不高 2.空間問題,被 清除 後會產生大量的不連續的記憶體碎片 當大物件找不到足夠的連續空間,就得提前gc 二.複製演算法 方案 將記憶體分為兩塊,...
JVM (PART VI)垃圾收集演算法
標記 首先標記出要 的物件 引用計數器為0或者引用鏈不可到達 清除 標記的物件。不足 1 清除和標記兩個過程的效率都不高。2 清除之後會產生大量不連續的空間碎片。導致後期經常執行gc操作。做法 將記憶體劃分為大小相同的兩個部分,每次只使用其中的一塊,當一塊記憶體用完了,就將還存活的物件複製到另乙份上...
JVM 垃圾收集演算法
這裡只是各個演算法的思想及發展過程 這是最基礎的收集演算法,分為兩個過程,標記和清除兩個階段。首先標記出需要 的物件,在標記完成後統一 掉所有被標記的物件。標記的過程就是之前判定物件的時候標記的。後續的演算法都是基於這種思路進行改進的。缺點呢,有兩個,1.效率問題,標記和清除的效率都不高。2.空間問...