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