java GC垃圾回收機制G1、CMS


CMS(Concurrent Mark-Sweep)是以犧牲吞吐量為代價來獲得最短回收停頓時間。對於要求服務器響應速度的應用上,這種垃圾回收器非常適合。在啟動JVM參數加上-XX:+UseConcMarkSweepGC ,這個參數表示對於老年代的回收采用CMS。CMS采用的基礎算法是:標記—清除。

使用場景:

1、應用程序對停頓比較敏感,並且在應用程序運行的時候可以提供更大的內存和更多的CPU

2、在JVM中,有相對較多存活時間較長的對象(老年代比較大)會更適合使用CMS。

 

為解決CMS算法產生空間碎片和其它一系列的問題缺陷,HotSpot提供了另外一種垃圾回收策略,G1(Garbage First)算法,通過參數-XX:+UseG1GC來啟用,該算法在JDK 7u4版本被正式推出,G1垃圾收集算法主要應用在多CPU大內存的服務中,在滿足高吞吐量的同時,竟可能的滿足垃圾回收時的暫停時間,下面是官方介紹:

The Garbage-First (G1) collector is a server-style garbage collector, targeted for multi-processor machines with large memories. It meets garbage collection (GC) pause time goals with a high probability, while achieving high throughput. The G1 garbage collector is fully supported in Oracle JDK 7 update 4 and later releases. The G1 collector is designed for applications that:

  • Can operate concurrently with applications threads like the CMS collector.
  • Compact free space without lengthy GC induced pause times.
  • Need more predictable GC pause durations.
  • Do not want to sacrifice a lot of throughput performance.
  • Do not require a much larger Java heap.

G1采用了另外一種完全不同的方式組織堆內存,堆內存被划分為多個大小相等的內存塊(Region),每個Region是邏輯連續的一段內存,G1中提供了三種模式垃圾回收模式,young gc、mixed gc 和 full gc,在不同的條件下被觸發。

總之,G1特點:

  • 支持很大的堆,高吞吐量
  • 更可控的停頓時間
  • 支持多CPU和垃圾回收線程
  • 在主線程暫停的情況下,使用並行收集
  • 在主線程運行的情況下,使用並發收集

實時目標:可配置在N毫秒內最多只占用M毫秒的時間進行垃圾回收

通過JVM參數 –XX:+UseG1GC 使用G1垃圾回收器

 

備注:

       1、g1在java9 便是默認的垃圾收集器,是cms 的替代者。

       2、cms在最新的jdk中,已經被移除


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM