兩分鐘帶你搞定常見垃圾收集器!

(1)JVM的運行模式

  • Server
  • Client

Client的啓動比Server模式快,但是長期運行進入穩定期後Server模式的程序運行速度會比Client快,這是因爲Server模式啓動的是重量級的JVM,對程序進行了更多了優化。

命令行執行java -version即可查詢自己電腦上的JVM運行模式:

 

 

(2)垃圾收集器之間的聯繫

不同的垃圾收集器可能針對不同的年代,有連線代表可以兼容。

 

(3)常見的年輕代垃圾收集器

  • Serial收集器

採用複製算法,採用單線程進行垃圾收集,在進行垃圾收集時,必須暫停所有工作線程("Stop-The-World",導致系統全局停頓),簡單高效,Client模式下默認的年輕代收集器。

  • Par New收集器

採用複製算法,採用多線程進行垃圾收集,在進行垃圾收集時,必須暫停所有工作線程,在多核下執行有優勢。

  • Parallel Scavenge收集器

採用複製算法,採用多線程進行垃圾收集,在進行垃圾收集時,必須暫停所有工作線程,在多核下執行有優勢,Server模式下默認的年輕代收集器。

 

(4)常見的老年代垃圾收集器

  • Serial Old收集器

採用標記-整理算法,採用單線程進行垃圾收集,在進行垃圾收集時,必須暫停所有工作線程,簡單高效,Client和Server模式下默認的老年代收集器。

  • Parallel  Old收集器

採用標記-整理算法算法,採用多線程進行垃圾收集,在進行垃圾收集時,必須暫停所有工作線程,在多核下執行有優勢。

  • CMS收集器

採用標記-清除算法,比較明顯的問題就是容易產生大量的內存碎片,優點是併發清理低停頓,因爲在整個過程和中最耗時的併發標記和併發清除過程收集器程序都可以和用戶線程一起工作,所以總體來說,Cms收集器的內存回收過程是與用戶線程一起併發執行的。

1. 初始標記:僅僅是標記一下GC roots 能直接關聯的對象,速度很快  

2. 併發標記:就是進行可達對象標記過程 

3. 重新標記:重新標記階段就是爲了修正併發標記期間因爲用戶程序繼續運行而導致標記產生變動的那一部分對象的標記記錄,這個階段的停頓時間一般會比初始標記階段的時間稍長,遠遠比並發標記階段時間短

4. 併發清理:併發進行垃圾清理

 

(5)同時用於年輕代和老年代的垃圾收集器

  • G1收集器

採用複製+標記-整理算法,可以同時對年輕代和老年代進行管理,同時解決了內存碎片的問題。

 

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