搞定常见垃圾收集器【Java】
(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收集器
采用復制+標記-整理算法,可以同時對年輕代和老年代進行管理,同時解決了內存碎片的問題。
總結
以上是生活随笔為你收集整理的搞定常见垃圾收集器【Java】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java计算一段程序的运行时间
- 下一篇: gc()两分钟了解JDK8默认垃圾收集器