JVM垃圾收集器簡述

補充幾個概念:
stop the world 指該收集器執行時,將阻塞一切線程
parallel 並行,可以多線程執行
concurrent併發,用戶進程可以與垃圾回收同時執行


下面介紹新生代收集器

serial收集器

顧名思義,串行收集器,在該收集器工作時,將stop the world。
優點:簡單高效(相對於其他單線程收集器)
缺點:stop the world ,單線程。

parNew收集器

實際上是serial的多線程版本,很多參數與serial相同。
但是: 它是目前唯一能與CMS搭配的新生代收集器
優點:多線程,能與CMS搭配
缺點:依舊stop the world

parallel scavenge收集器

看上去參數與parNew相同,都是多線程,都是新生代,都是使用複製算法。但是,它的側重點與ParNew不同,它注重的是 CPU利用率與最大吞吐量
吞吐量=用戶代碼執行時間/(用戶代碼執行時間+垃圾收集時間)
優點:對於注重高CPU利用率與吞吐量的服務器來說,它與Parallel Old相搭配是非常完美的。
缺點:大致同上


下面介紹老年代收集器

serial old收集器

serial收集器的老年代版本,現在的作用一般是:JDK1.5之前與parallel scavenge搭配使用。二是作爲CMS觸發“concurrent mod fail”時的後備方案

parallel old收集器

作爲與 parallel scavenge搭配使用,同樣注重高CPU利用率與吞吐量。

CMS收集器

注意,它使用的是標記-清除算法
可以稱得上是里程碑式的收集器,它做到了真正的併發收集垃圾
大致流程是:
初始標記——標記GCRoots
併發標記——標記不可達對象
重新標記——解決由於在併發階段可能出現的標記錯誤
併發收集——併發垃圾回收

優點:併發!!
缺點:
對CPU資源敏感,當只有少於4個CPU時,即使併發清除階段,也會讓用戶覺得系統變“慢”
不能處理浮動垃圾(在併發清除階段,用戶進程產生的未標記的垃圾),當清除階段剩餘的空間仍然不能滿足系統所需時,就會觸發“concurrent mode fail”,從而 stop the world ,由serial old 來接替清理垃圾的重擔。
空間碎片問題(因爲它是基於標記-清除算法)

G1收集器

又一個里程碑。同樣併發,但是整體來說基於標記-整理算法。且提供了一個可預測的停頓時間(這裏的實現主要是通過虛擬機對與每個要回收的垃圾,建立一個回收價值的優先隊列。這也是Garbage first的來源)。
清除流程大致類似CMS。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章