JVM (PART VI)垃圾收集演算法

2021-08-08 22:30:57 字數 1283 閱讀 2645

標記

首先標記出要**的物件(引用計數器為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.空間問...