1. 程式人生 > >JVM垃圾回收器之G1(Garbage First)--new

JVM垃圾回收器之G1(Garbage First)--new

g1垃圾收集器 基於 後臺 指定 維護 不用 大小 算法實現 聲明

  相比CMS收集器有兩個顯著的改進:

  (1)、 G1收集器是基於“標記-整理”算法實現的收集器,不會產生空間碎片

  (2)、 它可以精確地控制停頓,能讓使用者明確指定在一個長度為M毫秒的時間片段內,消耗在垃圾收集上的時間不得超過N毫秒。

  原理:G1將整個Java堆(包括新生代、老年代)劃分為多個大小固定的獨立區域(Region),並且跟蹤這些區域裏面的垃圾堆積程度,在後臺維護一個優先列表,每次根據允許的收集時間,優先回收垃圾最多的區域(這也是Garbage First名稱的由來)。

  區域劃分及有優先級的區域回收,保證了G1收集器在有限的時間內可以獲得最高的收集效率。

  G1的第一篇paper(附錄1)發表於2004年,在2012年才在jdk1.7u4中可用。oracle官方計劃在jdk9中將G1變成默認的垃圾收集器,以替代CMS。為何oracle要極力推薦G1呢,G1有哪些優點?

  首先,G1的設計原則就是簡單可行的性能調優,開發人員僅僅需要聲明以下參數即可:

-XX:+UseG1GC -Xmx32g -XX:MaxGCPauseMillis=200

  其中-XX:+UseG1GC為開啟G1垃圾收集器,-Xmx32g 設計堆內存的最大內存為32G,-XX:MaxGCPauseMillis=200設置GC的最大暫停時間為200ms。如果我們需要調優,在內存大小一定的情況下,我們只需要修改最大暫停時間即可。

  其次,G1將新生代,老年代的物理空間劃分取消了。

  這樣我們再也不用單獨的空間對每個代進行設置了,不用擔心每個代內存是否足夠。

JVM垃圾回收器之G1(Garbage First)--new