分類
一,采用分代理念的垃圾回收器:
1.年輕代:Serial PartNew Parallel Scavenge
2.老年代:
CMS Serial Old(MSC) Parallel Old
二,不采用分代理念的垃圾回收器:
G1 ZGC Shenandoah
?
可搭配使用的各個收集器之間關系圖:
?
并行和并發
很多人經常把這兩個搞混,當然筆者剛開始的時候也是傻傻分不清楚。其實只要記住并行說的是GC 線程之間的關系,而并發說的是GC和用戶線程之間的關系。
?
并行:同一時間有多條這樣的線程在協同工作,但是此時用戶線程是等待狀態
?
?
并發:同一時間GC和用戶線程可以一起工作一起運行。因此程序依然能夠響應用戶線程的操作但是由于GC線程也占用了一部分系統資源,所以此時的用戶線程處理的效率會下降
?
年輕代垃圾回收器
Serial收集器
Serial收集器
特點
垃圾回收時需要STW,整個STW需要停止掉所有的用戶線程來保證回收過程中引用關系不會發生變化。
但是并不是說垃圾回收的時候只會啟用一個回收線程,更準確的描述應該是 「同一時間只允許一個垃圾回收線程工作」 ,也就是 「不支持并行工作」 ,多個GC線程之間串行工作。
優點
1.對于內存資源受限的機器來說比較友好:
由于回收時停止掉了所有的用戶線程,因此他不必維護那些: 「用戶線程和GC線程同時運行的時候在回收過程中為了保證引用關系發生變化的額外內存開銷」 ;比如上一篇文章說到的原始快照和增量更新。
2.而且由于GC線程不是并行的,所以沒有線程之間的交互;對于處理器內核少(線程少)的機器來說,
?
第一點也就是線程串行執行一個線程完了之后才能執行下一個線程,而對于并行的來說其實本質上還是串行只不過各個線程間可以自由來回切換,所以需要對切換前后的資源進行額外的保存等等因此并發涉及到的這部分線程交互開銷對于該款串行執行的GC線程時沒有的
?
圖示:
串行和并行
缺點
但是缺點也很明顯:回收過程中停止掉所有用戶線程,對用戶肯定是不能容忍的
PartNew收集器
PartNew收集器
特點:
該款垃圾收集器和剛才講的第一個Serial收集器其實最大的不同就是GC Thread可以并行的區別。注意是 「并行」 ,之后講解的 「CMS」 才是可以實現GC Thread 「并發」 的收集器。
Parallel Scavenge收集器
特點
該款垃圾收集器同樣和PartNew收集器一樣,并行GC線程。只不過該款收集器重點是傾向于 「吞吐量」 。
老年代垃圾回收器
Serial Old收集器
Serial Old收集器
?
區別于Serial回收器只是回收算法的不同
?
Parallel Old收集器
Parallel Scavenge收集器的老年代版本,支持多線程 「并發」 收集。
組合
「吞吐量優先垃圾回收器組合」 :
新生代采用Parallel Scavenge收集器,老年代采用Parallel Old收集器
-
GC
+關注
關注
0文章
9瀏覽量
17093 -
JVM
+關注
關注
0文章
158瀏覽量
12238 -
線程
+關注
關注
0文章
505瀏覽量
19707
發布評論請先 登錄
相關推薦
評論