同學,你知道新生代和老年代用的垃圾回收演算法是什麼嗎?

今天上班,看著任務,沒幾個,啪啪啪的幾下敲完。

一天摸魚的快樂時光就此開始!

網抑雲和csdn跟上。

嗨起來!!

但是

對面的同事阿德突然來了個問題:

阿豬,你知道我們伺服器新生代老年代用的垃圾回收演算法是什麼嗎?

(︶︿︶)

阿豬:這個得看情況……(得。。。又不能摸魚了!)

首先,解答這個問題,我們得複習一下三種垃圾回收演算法:

1。標記-清除演算法

演算法分為“標記”和“清除”階段:首先標記出所有需要回收的物件,在標記完成後統一回收所有被標記的物件。它是最基礎的收集演算法,效率也很高,但是會帶來一個明顯的問題:

標記清除後會產生大量不連續的碎片

同學,你知道新生代和老年代用的垃圾回收演算法是什麼嗎?

標記-清除演算法

2。複製演算法

複製演算法可以將記憶體分為大小相同的兩塊,每次使用其中的一塊。當這一塊的記憶體使用完後,就將還存活的物件複製到另一塊去,然後再把使用的空間一次清理掉。這樣就使每次的記憶體回收都是對記憶體區間的一半進行回收。

然而缺點就是要用

雙倍記憶體!

同學,你知道新生代和老年代用的垃圾回收演算法是什麼嗎?

複製演算法

3 標記-整理演算法

根據老年代的特點特出的一種標記演算法,標記過程仍然與“標記-清除”演算法一樣,但後續步驟不是直接對可回收物件回收,而是讓所有存活的物件向一段移動,然後直接清理掉端邊界以外的記憶體。

同學,你知道新生代和老年代用的垃圾回收演算法是什麼嗎?

標記-整理演算法

總的來說,收集演算法還是很簡單的,接下來還要複習一下JVM的垃圾收集器

1.Serial收集器(-XX:+UseSerialGC -XX:+UseSerialOldGC)

Serial(序列)收集器是最基本、歷史最悠久的垃圾收集器了。大家看名字就知道這個收集器是一個單執行緒收集器了。它的 “單執行緒” 的意義不僅僅意味著它只會使用一條垃圾收集執行緒去完成垃圾收集工作,更重要的是它在進行垃圾收集工作的時候必須暫停其他所有的工作執行緒,直到它收集結束。

新生代採用複製演算法,老年代採用標記-整理演算法。

優點:

1.簡單而高效(與其他收集器的單執行緒相比)

2.Serial收集器由於沒有執行緒互動的開銷,因此有很高的單執行緒收集效率。

同學,你知道新生代和老年代用的垃圾回收演算法是什麼嗎?

Serial收集器

2.ParNew收集器(-XX:+UseParNewGC)

ParNew收集器其實就是Serial收集器的多執行緒版本,除了使用多執行緒進行垃圾收集外,其餘行為和Serial收集器完全一樣。預設的收集執行緒數跟cpu核數相同。可以用引數(-XX:ParallelGCThreads)指定收集執行緒數,但一般不推薦修改。

新生代採用複製演算法,老年代採用標記-整理演算法。

同學,你知道新生代和老年代用的垃圾回收演算法是什麼嗎?

ParNew收集器

3.CMS收集器(-XX:+UseConcMarkSweepGC(old))

CMS(Concurrent Mark Sweep)收集器是一種以獲取最短回收停頓時間為目標的收集器。它非常符合在注重使用者體驗的應用上使用,它是HotSpot虛擬機器第一款真正意義上的併發收集器, 它第一次實現了讓垃圾收集執行緒與使用者執行緒同時工作。

不用於新生代,老年代採用標記-清除演算法。

優點:

1.併發收集速度快

2.低停頓

缺點:

1。對CPU資源敏感;

2。無法處理浮動垃圾;

3。它使用的回收演算法-“標記-清除”演算法會導致收集結束時會有大量空間碎片產生,可以透過引數(-XX:+UseCMSCompactAtFullCollection)讓jvm在執行完標記清除後再做整理,但是速度變慢!

4。執行過程中的不確定性,會存在上一次垃圾回收還沒執行完,然後垃圾回收又被觸發的情況,特別是在併發標記和併發清理階段會出現,一邊回收,系統一邊執行,也許沒回收完就再次觸發full gc,也就是“concurrent mode failure”,此時會進入stop the world,用serial old垃圾收集器來回收

同學,你知道新生代和老年代用的垃圾回收演算法是什麼嗎?

CMS收集器

複習了這麼多,答案呼之欲出!

看你伺服器使用的JVM垃圾收集器!

一般如果你的伺服器是單核的,那麼推薦使用Serial收集器+CMS收集器來使用,Serial收集器用於新生代,CMS收集器用於老年代。因此他們對於的垃圾回收演算法就是

複製演算法和標記-清除演算法

如果你的伺服器是多核的,那麼推薦使用ParNew收集器+CMS收集器來使用,ParNew收集器用於新生代,CMS收集器用於老年代。因此他們對於的垃圾回收演算法就是

複製演算法和標記-清除演算法

當然,你可以自己指定垃圾收集器,下圖是組合:

同學,你知道新生代和老年代用的垃圾回收演算法是什麼嗎?

垃圾收集器搭配圖

=================================================

阿德:阿豬,這不是還有G1嗎?

→_→

G1後面再說,你先把這幾個看了!