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