探秘Java 7新增垃圾回收器G1特性 – JAVA編程語言程序開發技術文章

G1垃圾回收器(簡稱G1 GC)是JDK 7中Java HotSpot VM新引入的垃圾回收器,Java SE 6 Update 14中已經包含瞭一個G1的體驗版本(據51CTO之前的報導,在Java SE 6 u14於6月初登場時,原本Sun的聲明是:G1垃圾回收器需要收費方能使用。然而之後不久,Sun表示這是一個誤會,修改瞭原本的發佈聲明,並表示現在以及將來對G1的使用都是完全免費的),G1是設計用於替代HotSpot低延遲的並行標記/清除垃圾回收器(也叫做CMS)的。
  Java 7 G1屬性


  G1是一個服務端垃圾回收器,有以下屬性:


  ◆並行和並發性:G1利用瞭當今硬件中存在的並行性,當Java應用程序的線程被停止時,它使用所有可用的CPU(核心,硬件線程等)加速其停止,在停止過程中運行Java線程最小化整個堆棧。


  ◆代:和其他HotSpot GC一樣,G1是一代,意味著它在處理新分配的對象(年輕代)和已經生存瞭一段時間的對象(年老代)時會不同,它主要集中於新對象上的垃圾回收活動,因為它們是最可能回收的,舊對象隻是偶爾訪問一下,對於大多數Java應用程序,代的垃圾回收對於替代方案具有重要優勢。


  ◆壓縮:和CMS不同,G1會隨時間推移對堆棧進行壓縮,壓縮消除瞭潛在的碎片問題,確保長時間運行的操作流暢和一致。


  ◆可預測性:G1比CMS預測性更佳,這都是由於消除瞭碎片問題帶來的好處,再也沒有CMS中停止期間出現的負面影響,另外,G1有一個暫停預測模型,允許它滿足(或很少超過)暫停時間目標。


  Java 7 G1描述


  和其它HotSpot GC相比,G1采用瞭一個非常不同的堆棧佈局方法,在G1中,年輕代和年老代之間沒有物理隔離,相反,它們之間有一個連續的堆棧,被分成大小一樣的區域(region),年輕代可能是一套非連續的區域,年老代也一樣,這就允許G1在年輕代和年老代之間靈活地移動資源。


  G1中的回收是通過消除暫停發生的,在此期間,幸存者指的是回收集被轉移到另一個區域,以便回收區域可以再生,消除暫停是並行的,所有可用的CPU都會參加,大多數消除暫停收集可用的年輕區域,和其它HotSpot GC中的年輕回收是一樣的,在暫停期間偶爾也會選擇年老區域回收,因為G1在年輕一代回收上還肩負瞭年老代的回收活動。


  和CMS相同的是,G1會定期執行一個並發標記暫停,這個階段的主要職責是識別哪一個年老區域的垃圾對象是最完整的,因為這些是最有效和最值得回收的,和CMS不同的是,G1不會執行並發清除暫停,相反,最有用的年老區域是通過並發標記暫停標識的,在隨後的消除暫停期間進行回收。


  使用G1


  G1仍然被看做是試驗品,可以使用下面兩個參數開啟它:


  -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC 為瞭設置一個GC暫停時間目標,使用下面的參數:


  -XX:MaxGCPauseMillis =50  (暫停時間目標50ms) 使用G1時還可以指定時間間隔,當GC暫停持續時間沒有上面給出的時間長時可以這麼用:


  -XX:GCPauseIntervalMillis =200  (暫停間隔目標200ms) 註意上面兩個選項表示的目標,沒有承諾和保證,在某些情況下它們可能能夠工作,GC不是總是能夠執行它們。


  另外,年輕代的大小可以明確指定影響消除暫停時間:


  -XX:+G1YoungGenSize=512m (年輕代大小512M) G1也使用幸存空間(可能是非連續的區域),它們的大小可以使用一個常見的參數指定,如:


  -XX:SurvivorRatio=6 最後,為瞭運行G1充分發揮其潛力,嘗試設置以下兩個默認被禁用瞭的參數,因為它們可能會暴露一個罕見的競爭狀態:


  -XX:+G1ParallelRSetUpdatingEnabled   -XX:+G1ParallelRSetScanningEnabled  註意當設置瞭-XX:+PrintGCDetails後,G1比起其它HotSpot GC要囉嗦得多,因為它會打印每個GC線程的計時和其它有助於進行故障排除的信息,如果你想使GC日志更簡單,請使用-verbosegc參數。


  Java 7 G1最新進展


  G1開發現在主要集中在遺留的可靠性問題和改善性能,同時也在逐步移除下面的限制:


  ◆G1不能完全支持JVM工具接口(JVM TI)或Java管理擴展(JMX),因此關於G1的監視和管理工具很可能不能正常工作;


  ◆G1不支持增量永久性代回收,如果一個應用程序產生瞭許多類轉儲,需要永久性代回收,這在完整GC期間是可以實現的;


  ◆從GC暫停時間來說,G1有時表現比CMS好有時比CMS差。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *