JVM學習(四)——JVM垃圾回收——垃圾收集算法,垃圾收集器

垃圾收集算法

1、標記-清除算法

該算法分爲“標記”和“清除”階段:首先標記出所有需要回收的對象,在標記完成後統一回收所有被標記的對象。
在這裏插入圖片描述

2、複製算法

將內存分爲大小相同的兩塊,每次使用其中的一塊。當這一塊的內存使用完後,就將還存活的對象複製到另一塊去,然後再把使用的空間一次清理掉。這樣就使每次的內存回收都是對內存區間的一半進行回收。
在這裏插入圖片描述

3、標記-整理算法

根據老年代的特點特出的一種標記算法,標記過程仍然與“標記-清除”算法一樣,但後續步驟不是直接對可回收對象回收,而是讓所有存活的對象向一端移動,然後直接清理掉端邊界以外的內存。
在這裏插入圖片描述

4、分代收集算法

當前虛擬機的垃圾收集都採用分代收集算法,這種算法沒有什麼新的思想,只是根據對象存活週期的不同將內存分爲幾塊。一般將 java 堆分爲新生代和老年代,這樣我們就可以根據各個年代的特點選擇合適的垃圾收集算法。

新生代:在新生代中每次收集都會有大量對象死去,所以可以選擇複製算法,只需要付出少量對象的複製成本就可以完成每次垃圾收集。
老年代:老年代的對象存活機率是比較高的,而且沒有額外的空間對它進行分配擔保,所以我們必須選擇“標記-清除”或“標記-整理”算法進行垃圾收集。

垃圾收集器

如果說收集算法是內存回收的方法論,那麼垃圾收集器就是內存回收的具體實現。
因爲知道現在爲止還沒有最好的垃圾收集器出現,更加沒有萬能的垃圾收集器,我們能做的就是根據具體應用場景選擇適合自己的垃圾收集器。

1、Serial 收集器

(1)簡介:
Serial(串行)收集器:是一個單線程收集器,它的 “單線程” 的意義不僅僅意味着它只會使用一條垃圾收集線程去完成垃圾收集工作,更重要的是它在進行垃圾收集工作的時候必須暫停其他所有的工作線程( “Stop The World” ),直到它收集結束
在這裏插入圖片描述
(2)使用:
新生代採用複製算法,老年代採用標記-整理算法。
(3)優缺點:
優點:簡單而高效(與其他收集器的單線程相比)。
缺點:帶來的不良用戶體驗。

2、ParNew 收集器

(1)簡介:
ParNew 收集器其實就是 Serial 收集器的多線程版本,除了使用多線程進行垃圾收集外,其餘行爲(控制參數、收集算法、回收策略等等)和 Serial 收集器完全一樣。
在這裏插入圖片描述
(2)使用:
新生代採用複製算法,老年代採用標記-整理算法。
它是許多運行在 Server 模式下的虛擬機的首要選擇,除了 Serial 收集器外,只有它能與 CMS 收集器配合工作。

並行和併發概念補充:
並行(Parallel) :指多條垃圾收集線程並行工作,但此時用戶線程仍然處於等待狀態。
併發(Concurrent):指用戶線程與垃圾收集線程同時執行(但不一定是並行,可能會交替執行),用戶程序在繼續運行,而垃圾收集器運行在另一個 CPU 上。

3、Parallel Scavenge 收集器

簡介:
Parallel Scavenge 收集器也是使用複製算法的多線程收集器,它看上去幾乎和ParNew都一樣。
Parallel Scavenge 收集器關注點是吞吐量(高效率的利用 CPU)
CMS 等垃圾收集器的關注點更多的是用戶線程的停頓時間(提高用戶體驗)。
所謂吞吐量就是 CPU 中用於運行用戶代碼的時間與 CPU 總消耗時間的比值。

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

4、Serial Old 收集器

Serial 收集器的老年代版本,它同樣是一個單線程收集器。它主要有兩大用途:一種用途是在 JDK1.5 以及以前的版本中與 Parallel Scavenge 收集器搭配使用,另一種用途是作爲 CMS 收集器的後備方案。

5、Parallel Old 收集器

Parallel Scavenge 收集器的老年代版本。使用多線程和“標記-整理”算法。在注重吞吐量以及 CPU 資源的場合,都可以優先考慮 Parallel Scavenge 收集器和 Parallel Old 收集器。

7、CMS 收集器

簡介:
CMS(Concurrent Mark Sweep)收集器是一種以獲取最短回收停頓時間爲目標的收集器。它而非常符合在注重用戶體驗的應用上使用。實現了讓垃圾收集線程與用戶線程(基本上)同時工作。

CMS 收集器是一種 “標記-清除”算法實現的,分爲四步:

  1. 初始標記: 暫停所有的其他線程,並記錄下直接與 root 相連的對象,速度很快 ;
  2. 併發標記:同時開啓 GC 和用戶線程,用一個閉包結構去記錄可達對象。
  3. 重新標記:重新標記階段就是爲了修正併發標記期間因爲用戶程序繼續運行而導致標記產生變動的那一部分對象的標記記錄
  4. 併發標記:開啓用戶線程,同時 GC 線程開始對爲標記的區域做清掃。

在這裏插入圖片描述
優缺點:
優點:併發收集、低停頓。
缺點:

  1. 對 CPU 資源敏感;
  2. 無法處理浮動垃圾;
  3. 它使用的回收算法-“標記-清除”算法會導致收集結束時會有大量空間碎片產生。

8、G1 收集器

簡介:
G1 (Garbage-First) 是一款面向服務器的垃圾收集器,主要針對配備多顆處理器及大容量內存的機器. 以極高概率滿足 GC 停頓時間要求的同時,還具備高吞吐量性能特徵.

特點:

  • 並行與併發
  • 分代收集
  • 空間整合
  • 可預測的停頓

G1 收集器的運作大致分爲以下幾個步驟:

  1. 初始標記
  2. 併發標記
  3. 最終標記
  4. 篩選回收

G1 收集器在後臺維護了一個優先列表,每次根據允許的收集時間,優先選擇回收價值最大的 Region

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章