【JVM】垃圾收集器

垃圾收集器

收集算法未內存回收的方法論,則垃圾回收則爲內存回收的具體實現。主流的垃圾收集器爲 Serial,ParNew,Parrallel Scavenge, CMS,Serial OLd, Parrel Old, G1.算法

Serial收集器

  1. GC線程 新生代採起復制算法,暫停全部用戶線程
  2. GC線程 老年代採起標記整理算法,暫停全部用戶線程

虛擬機運行在client模式下默認的新生代收集器多線程

優點

  1. 簡單而高效
  2. 對於現場定單個CPU環境來講,Serial收集器因爲沒有線程開銷,能夠專心作垃圾收集天然能夠得到最高的單線程收集效率

ParNew收集器

是多線程的Serial收集器併發

  1. 新生代採用複製算法,暫停全部用戶線程
  2. 老年代採起標記整理算法, 暫停全部用戶線程

優點

運行在Server模式下的首選的新生代收集器線程

PS:兩個詞 並行 併發blog

  1. 並行: 多條垃圾回收線程並行工做,但用戶線程仍處於 等待狀態
  2. 併發: 用戶線程與垃圾回收線程同時執行,但不必定是並行的,可能會使用戶線程在運行,但垃圾收集程序運行於另外一個CPU上

Parrallel New

不一樣於其餘垃圾收集器,ParrallelNew的目標達到一個可控制的吞吐量(運行用戶代碼時間/(運行用戶代碼時間+GC消耗時間)),停頓時間越短就越適合須要與用戶交互的程序,而搞吞吐量則能夠高效率的利用CPU時間,適合在後臺運算二不須要太多交互的任務。內存

Serial Old

Serial收集器的老年代版本,單線程標記整理算法,在client模式下的虛擬機使用。資源

Parallel Old

ParrellScavenge的老年代版本,使用多線程和標記整理算法。虛擬機

CMS收集器

以獲取最短回收停頓時間爲目標的收集器。io

  1. 初始標記 STW
  2. 併發標記 和用戶線程一塊兒
  3. 從新標記 STW
  4. 併發清除 和用戶線程一塊兒

缺點

  1. 對CPU資源敏感
  2. 沒法處理浮動垃圾
  3. 基於標記清除算法,有大量的碎片

G1

G1以前的 收集器 收集範圍爲整個新生代或者老年代,G1則是 將整個JAVA堆劃分爲多個大小相等的區域,雖然還保留新生代和老年代的概念,可是新生代和老年代再也不是物理隔離,而是一部分region的集合。可預測停頓是 創建在其有計劃的進行全區域的垃圾收集,G1跟蹤各個區域內的垃圾堆積的價值大小,在後臺維護一個有限列表,每次根據容許的手機時間,手機回收價值最大的區域。效率

  1. 並行和併發
  2. 分代收集
  3. 空間整合 G1從總體來看是基於 標記 整理,從局部看 是 基於複製算法的。
  4. 可預測的停頓

ways

  1. 初始標記 STW
  2. 併發標記
  3. 最終標記STW
  4. 篩選回收 STW
相關文章
相關標籤/搜索