JVM-垃圾回收器

1.Serial:

最基本的垃圾回收器,新生代收集的唯一選擇,採用複製算法的收集器,單線程,進行垃圾收集時,

必須暫停其他所有的工作線程。

“Stop The World”

2.ParNew:

是Serial收集器的多線程版本,其行爲還包括Serial收集器可用的所有控制參數,收集算法,Stop The World,

對象分配規則,回收策略等,都與Serial一樣。只有它能與CMS收集器配合使用

3.Parallel Scavenge:

新生代收集器,採用複製算法的收集器,又是並行的多線程收集器。目的是達到一個可控制的吞入量。

吞吐量 = 運行用戶代碼時間 / (運行用戶代碼時間 + 垃圾收集時間);

提供了兩個參數用戶精確控制吞吐量:15225057957

1.控制最大垃圾收集停頓時間(MaxGCPauseMillis),2.設置吞吐量大小(GCTimeRatio)

GC停頓時間縮小是以犧牲吞吐量和新生代空間換區的,並不是MaxGCPauseMillis越小越好。

還有一個參數UseAdaptiveSizePolicy值的關注,這是一個開關參數,當打開之後,就不用手動指定參數細

節了,自動調節最合適的停頓時間或者最大的吞吐量,這種調節方式稱爲:GC自適應調節策略。

GC自適應調節策略也是Parallel Scavenge與ParNew最大的區別。

4.Serial Old:

是Serial收集器的老年代版本,同樣是一個單線程的收集器,使用"標記整理"算法。

如果在server端有兩大用途:

1.在jdk1.5及之前與Parallel Scavenge搭配使用2.作爲CMS收集器的後備預案

5.Parallel Old:

是Parallel Scavenge收集器的老年代版本,使用多線程和"標記-整理"算法。JDK1.6纔開始提供.

6.CMS收集器

目的:以獲取最短回收停頓時間爲目標的收集器。基於“標記清除”算法實現的。

整個過程包括四個步驟:1.初始標記2.併發標記3.重新標記3.併發清除

缺點:

1.佔cpu:在併發階段,佔有線程(cpu資源)而導致應用程序變慢,總吞吐量下降。

2.無法處理浮動垃圾,cms併發處理階段程序還在運行着,還會有新的垃圾生成,只能下次回收。

3.採用“標記清除”會大量空間碎片產生,

7.G1:

面向服務端應用的垃圾回收器。整體上基於“標記-整理”算法.

特點:

  1. 並行和併發

  2. 分代收集

  3. 空間整合

  4. 可預測的停頓

它將整個java堆劃分爲多個大小相等的獨立區域,雖然還保留有新生代和老年代的概念,但

新生代和老年代不再是物理隔離得了,它們都是一部分Region(不需要連續)的集合。

之所以能建立可預測的停頓時間模型,是因爲可以有計劃的避免在整個java堆中進行全區域的

垃圾回收。G1跟蹤各個Region裏面的垃圾堆積的價值大小,後臺維護一個優先列表,每次

根據允許的收集時間,優先回收價值最大的Region。這種使用Region劃分內存空間以及有優先級

的區域回收方式,保證了G1收集器在有限的時間內可以獲取儘可能高的收集效率。

整個過程包括四個步驟:1.初始標記2.併發標記3.最終標記4.篩選回收

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