JVM垃圾收集器

7種垃圾收集器

Serial收集器(新生代串行,老年代串行)

Serial收集器(新生代串行,老年代串行)

原理:該收集器是一個單線程收集器,這裏的單線程不僅只使用或者一個線程區完成垃圾收
集,而且需要將其他暫停其他工作線程。

優點:簡單而高效。在單CPU的環境下,由於沒有線程交互的開銷,可以獲得最高的單線程收集效率。

缺點:用戶體驗不是很好。根據原理可知,用戶需要暫停一段時間纔可以繼續工作。(注:但該收集器仍然是運行在Client模式下的好選擇,因爲分配給虛擬機的內存不會很大,所以產生的停頓時間可以控制在幾十秒最多一百多毫秒以內)。

使用:可以使用-XX:UseSerialGC打開
在這裏插入圖片描述

ParNew收集器(新生代並行,老年代串行)

原理:Serial的多線程版本,其他行爲包括Serial收集可用的所有控制參數、收集算法、stop the world、對象分配規則、回收策略等都與Serial一樣,在實現上也共用了相當多的代碼。

優點:在多CPU環境下,隨着CPU的數量增加,它對於GC時系統資源的有效利用是很有好處的。

缺點:ParNew 收集器在單CPU的環境中絕對不會有比Serial收集器有更好的效果,甚至由於存在線程交互的開銷,該收集器在通過超線程技術實現的兩個CPU的環境中都不能百分之百地保證可以超越。

使用:它默認開啓的收集線程數與CPU的數量相同,在CPU非常多的情況下可使用-XX:ParallerGCThreads參數設置。最常見的應用場景是配合老年代CMS GC工作。
新生代並行(多) 對老年代串行(一)

Parallel Scavenge收集器(串行收集器在新生代和老年代並行化)(默認的收集器)

原理:基本上和ParNew差不多。也是用的複製算法,又是並行的多線程收集器。
但該收集器的關注點與其他收集器不同,CMS等收集器是儘可能的縮短垃圾收集時用戶線程的停頓時間,而該收集器則是關注於一個可控制的吞吐量(CPU運行用戶代碼的時間/CPU總消耗的時間)。

停頓時間短的是適合於用戶交互的程序,可提升用戶體驗。而高吞吐量的則高效利用CPU儘快完成任務,主要適合後臺運算而不需要太多交互的任務。

用法:提供了兩個參數用來精準控制吞吐量。分別是控制最大垃圾收集停頓時間的-XX:MaxGCPauseMillis和直接設置吞吐量大小的-XX:GCTimeRadio。另外還有一個-XX:UseAdaptiveSizePolicy參數(該策略也是於ParNew收集器的一個重要區別)需要關注,該參數打開後,就不需要手動指定新生代的比例、晉升老年代對象的大小等參數,虛擬機會自動根據運行情況監控信息,動態調整這些參數來提供最合適的停頓時間或最大吞吐量。
在這裏插入圖片描述

ParalelOld收集器

原理 :是Paralel Scavenge的老年代版本,使用多線程的標記-整理算法,Paralel Old收集器是在JDK1.6纔開始提供。在jdk1.6之前只能搭配Serial Old收集器。

CMS收集器(併發標記清除器)

原理:是一種以獲取最短回收停頓時間爲目標的收集器。
在這裏插入圖片描述

注:併發指的是與用戶線程一起執行。

應用場景:適合應用於互聯網或者B/S系統的服務器上,這類應用重視服務器的響應速度,希望系統停頓時間短。CMS非常適合堆內存大、cpu核數多的服務器應用,是G1出現之前大型應用的首選收集器。
使用:開啓該收集器的JVM參數:-XX:+UseConcMarkSweepGC 開啓該參數後會自動將-XX:UserParNewGC打開,並使用ParNew+CMS+Serial Old收集器的組合,其中Serial Old將作爲CMS出錯的後備收集器。
優點:由於耗時最長的併發標記核併發清除過程中,垃圾回收器可用核用戶一起工作,所有總體上看CMS收集器的內存回收核用戶線程是一起併發執行的。
缺點:併發執行堆CPU壓力大; 採用標記清除算法會熬製大量空間碎片。
在這裏插入圖片描述

Serial Old收集器(jdk8已不用)

原理:是Serial收集器的老年代版本,單線程並參與標記-整理算法。是運行在Client下默認的java虛擬機的老年代收集器。
在Server模式在,主要有兩個用途(瞭解):

  • 在jdk1.5之前與新生代的Parallel Scavenge收集器搭配使用
  • 作爲老年代版本中CMS的後備收集器。

G1收集器

原理:是面向服務端應用的收集器。主要改變了Eden,Survivor和Tenured等內存區域物理上不再連續,而是變成了一個個大小一樣的region。每個region從1M到32M不等,一個region屬於哪個區域是不一定的,即有可能是eden、survivor或tenured。
特點

  • 並行與併發:G1能充分利用多CPU、多核環境,儘量縮短STW停頓時間
  • 分代收集:G1整體上採用標記整理算法,局部region採用複製算法,不會產生內存碎片。
  • 空間整合:G1雖然將整個內存區域混合在一起,但還是有新生代和老年代的劃分,可以採用不同的GC方式來處理不同的區域。
  • 可預測的停頓:能讓使用者明確指定一個長度在M毫秒的時間段內,消耗在垃圾收集上的時間不得超過N毫秒。

優點:不會產生很多內存碎片;G1在停頓時間上回添加了預測機制,用戶可用指定期望停頓時間。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
回收步驟
在這裏插入圖片描述
回收過程
在這裏插入圖片描述

發佈了3 篇原創文章 · 獲贊 2 · 訪問量 3935
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章