[toc]算法
既然選擇了遠方,即便天寒地凍,路遙馬亡,我本就一無全部,又有何懼。
stop the world
。-XX:UseSerialGC
, -XX:+UseConcMarkSweepGC -XX:-UseParNew
啓用GC
日誌以下所示[GC (Allocation Failure) [DefNew: 67932K->0K(78720K), 0.0002327 secs] 68792K->859K(253504K), 0.0002491 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
-XX:UseSerialGC
、-XX:+UseParNewGC
啓用GC
日誌以下[Full GC (Allocation Failure) [Tenured: 10250K->10249K(15360K), 0.0187416 secs] 10250K->10249K(19968K), [Metaspace: 9228K->9228K(1058816K)], 0.0187608 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
-XX:UseParNew
、-XX:UseConcMarkSweepGC
啓用GC
日誌以下[GC (Allocation Failure) [ParNew: 82K->24K(4608K), 0.0003178 secs][Tenured: 15353K->10251K(15360K), 0.0185459 secs] 15435K->10251K(19968K), [Metaspace: 8855K->8855K(1056768K)], 0.0188925 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]
ParNew
相比,ParallelGC
更關注吞吐量-XX:MaxGCPauseMillis
:設置最大垃圾停頓時間。例:-XX:MaxGCPauseMillis=200
-XX:GCTimeRatio
:設置吞吐量大小。取值範圍爲 0~100
的整數。若值爲 n
,那麼 JVM
將花費不超過 1/(1+n)
的時間在 GC
上。例:-XX:GCTimeRatio=99
-XX:+UseAdaptiveSizePolicy
:自適應調整 新生代大小、eden 和 survivor 比例,以及晉升老年代對象年齡等參數-XX:+UseParallelGC
、-XX:+UseParallelOldGC
啓用GC
日誌以下[GC (Allocation Failure) [PSYoungGen: 2410K->512K(4608K)] 12650K->10947K(19968K), 0.0016662 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
ParallelGC
一致,關注系統吞吐量,ParallelOldGC
在 jdk1.6
後(包括) 纔可使用-XX:ParalleGCThreads
:設置 GC
時,並行的線程數-XX:+UseParallelGC
、-XX:+UseParallelOldGC
啓用GC
日誌以下[Full GC (Allocation Failure) [PSYoungGen: 480K->0K(4608K)] [ParOldGen: 10499K->626K(15360K)] 10979K->626K(19968K), [Metaspace: 3063K->3063K(1056768K)], 0.0043604 secs] [Times: user=0.02 sys=0.00, real=0.00 secs]
CMS
是一款 低停頓 的 老年代 垃圾收集器。通常與 Serial
, ParNew
新生代收集器一塊兒工做,默認是 ParNew
。
工做流程細化爲如下幾個步驟多線程
stop the world
)stop the world
)CMS
觸發stop the world
GC Root
對象card
會被標記爲 dirty
。concurrent mode failure
與應用線程併發執行,處理上一個階段被標記爲 dirty
的對象。該階段爲了減小 從新標記 產生的停頓時間,有可能會等待一次 ygc
併發
stop the world
dirty
和 root
繼續往下標記可達對象在併發清理階段,提到,有可能會發生 concurrent mode failure
現象。
出現該現象的本質緣由以下:
老年代沒有足夠的空間分配對象,從而致使使用 Serial Old
垃圾收集器觸發一次 Full GC
性能
CMS
默認啓動的併發線程是(ParallelGCThreads + 3)/ 4
. ParallelGCThreads
表示新生代 GC
線程數量。-XX:ConcGCThreads -XX:ParallelCMSThreads
可手動指定 CMS
併發線程ygc
CMS GC
CMS
在垃圾收集完成後,進行一次內存碎片整理,碎片整理會 stop the world
。CMS
回收後,進行一次內存壓縮ygc
最大時間筆者沒法在 jdk1.8
上,測試出 serial + parallel old
組合。
測試
CMS垃圾收集器spa