CMS一直是面試中的常考點,今天咱們用通俗易懂的語言簡單介紹下。java
如上圖:JVM虛擬機將堆內存區域分代了,先生代是朝生夕死的區域,老年代是老不死的區域,不一樣的年代對象有不一樣特性,所以須要不一樣的垃圾收集器去處理。以下圖,黑豎線左邊的區域都是分代垃圾收集器,G1以後內存就不分代了。面試
Serial(SY),Serial Old(SO)是單線程垃圾收集器組合,垃圾收集線程是單線程的,隨着現代內存區域愈來愈大,SY+SO組合已經愈來愈少了。垃圾收集的單線程須要STW時間無疑越長。這種組合比較合適較早JDK版本。以下圖,用戶線程表示應用程序處理過程,垃圾收集線程表示垃圾線程清理垃圾過程,此階段應用程序是須要等待垃圾線程STW的。算法
前面咱們說了,單線程垃圾收集器缺點就是當內存區域變大,收集效率會很低,那OK,搖身一變,以下圖,多線程垃圾處理器。微信
值得注意的是:PS+PO組合是JDK1.7,JDK1.8默認垃圾收集器。經過java -XX:+PrintCommandLineFlags命令能夠在Dos界面查看。以下圖,該命令能夠查看JVM初始化的默認參數。好比:-XX:InitialHeapSize表示初始化堆大小。多線程
並行處理有了,CMS+ParNew又是幹嗎的?其實PO關注是吞吐量,而CMS關注是縮短STW時間。而CMS處理流程更復雜,至於ParNew,其實約等於PS,若是你注意最上面一個圖,你會發現PS年輕代沒法和CMS組合。因此就多出來了一個ParNew。併發
CMS,全名稱Concurrent Mark Sweep,中文釋義併發標記清除,從名字上能夠看出算法思想使用標記清除算法,下面咱們看看CMS簡化處理流程。ide
劣勢:碎片嚴重。spa
主要簡單介紹了分代垃圾回收器,特別介紹了cms執行過程,G1留下次再說吧。好了,文章有地方還寫的不清晰但願親們加以指正和點評,喜歡的請點贊加關注哦。點關注,不迷路,我是叫練,邊叫邊練,公衆號【叫練】,微信號【jiaolian123abc】。祝你們生活愉快。線程