1. 程式人生 > 其它 >垃圾回收器學習之Full GC和CMS GC的區別

垃圾回收器學習之Full GC和CMS GC的區別

Parallel Scavenge(-XX:+UseParallelGC)框架下,預設是在要觸發full GC前先執行一次young GC,並且兩次GC之間能讓應用程式稍微執行一小下,以期降低full GC的暫停時間(因為young GC會盡量清理了young gen的死物件,減少了full GC的工作量)。併發GC的觸發條件就不太一樣。以CMS GC為例,它主要是定時去檢查old gen的使用量,當使用量超過了觸發比例就會啟動一次CMS GC,對old gen做併發收集。併發並行垃圾回收器在觸發full gc之前都會先觸發一下young垃圾回收,這個可以根據引數進行配置。而序列垃圾回收的full gc預設就是老年代回收。

  1. Full GC == Major GC指的是對老年代/永久代的stop the world的GC

  2. Full GC的次數 = 老年代GC時 stop the world的次數

  3. Full GC的時間 = 老年代GC時 stop the world的總時間

  4. CMS 不等於Full GC,我們可以看到CMS分為多個階段,只有stop the world的階段被計算到了Full GC的次數和時間,而和業務執行緒併發的GC的次數和時間則不被認為是Full GC。CMS主要可以分為initial mark(stop the world), concurrent mark, remark(stop the world), concurrent sweep幾個階段,其中initial mark和remark會stop the world

  5. Full GC本身不會先進行Minor GC,我們可以配置,讓Full GC之前先進行一次Minor GC,因為老年代很多物件都會引用到新生代的物件,先進行一次Minor GC可以提高老年代GC的速度。比如老年代使用CMS時,設定CMSScavengeBeforeRemark優化,讓CMS remark之前先進行一次Minor GC。

本文來自部落格園,作者:up~up,轉載請註明原文連結:https://www.cnblogs.com/soft-engineer/p/15095406.html