本隨筆是《深刻理解Java虛擬機 JVM高級特性與最佳實踐》讀書筆記。算法
1.JDK1.7以後的HotSpot虛擬機所包含的全部收集器以下:併發
解讀:佈局
1. 總共有7種垃圾收集器學習
2.Serial,ParNew,Parallel Scavenge 負責堆年輕代中的內存回收網站
3.Serial Old,CMS,Parallel Old 負責堆老年代中的內存回收spa
4.G1分代回收,能獨立管理整個GC堆線程
5.兩個收集器中間存在連線的,說明可以配合工做server
各個收集器對比對象
名稱blog |
收集算法 |
工做區域 |
可配合對象 |
線程 |
併發 |
適用場合 |
優缺點 |
Serial |
複製算法 |
新生代 |
CMS; Serial Old |
單 |
否 |
單CPU; Client模式下 |
缺:stop the world; 優:簡單高效,沒有線程交互開銷,專一於GC; |
ParNew |
複製算法 |
新生代 |
CMS; Serial Old |
多 |
是 |
多CPU; Server模式下 |
缺:stop the world 優:並行併發GC |
Parallel Scavenge |
複製算法 |
新生代 |
Serial Old; Parallel Scavenge |
多 |
是 |
吞吐量控制,Client,server都可以 |
主要關注吞吐量,經過吞吐量的設置控制停頓時間,適應不一樣的場景 |
Serial Old |
標記整理算法 |
老年代 |
Serial,ParNew,Parallel Scavenge |
單 |
否 |
主要Client模式下 |
缺:stop the world |
Parallel Old |
複製算法(Parallel Scavenge老年代版本) |
老年代 |
Parallel Scavenge |
多 |
是 |
吞吐量控制,Client,server都可以 |
主要關注吞吐量,經過吞吐量的設置控制停頓時間,適應不一樣的場景 |
CMS(Concurretn Mark Sweep) |
標記清除算法 |
老年代 |
Serial,ParNew, Serial Old是其備選方案 |
多 |
是 |
互聯網站;B/S系統服務端 |
缺:CPU資源敏感,沒法處理浮動垃圾,產生大量內存碎片 優:併發收集,低停頓 |
G1 |
總體基於標記整理算法 |
新生代&老年代 |
|
多 |
是 |
面向服務端應用 |
優:並行與併發, 分代收集,空間整合(標記整理算法),可預測停頓 |
名詞解釋
並行(Parallel):只多條垃圾收集線程並行工做,但此時用戶線程處於等待狀態,也就是stop the world.
併發(Concurrent):只用戶線程與垃圾收集線程同時執行(但不必定是並行的,可能會交替執行),用戶程序在繼續運行,而垃圾收集程序運行於另外一個CPU.
Garbage First收集器
現最流行的是G1(Garbage First)收集器,也是當今收集器技術發展的最前沿成果之一,現重點學習一下。
1.優勢
2.特色
3.須要思考的問題
G1把內存化整爲零,將整個堆劃分爲多個Region。那麼垃圾收集真的就是以Region爲單位進行的嗎?聽起來瓜熟蒂落,仔細想一想其實不是,Region不多是孤立的。一個對象分配在某個Region中,但它並非只能被本Region中的其餘對象引用,而是能夠爲整個堆中的任意其餘對象引用。那麼在利用可達性分析判斷對象是否存活時,豈不是要掃描整個Java堆才能保證準確性?此類問題在其餘收集器中也會出現,新生代年老代一樣面臨此類問題。
此類問題的JVM採用Remembered Set來避免全堆掃描。(包括新生代年老代的解決思路)。Remembered Set工做機制,詳見 《深刻理解Java虛擬機 JVM高級特性與最佳實踐》第三章3.5.7
4.運做步驟