成爲 Java GC 專家html
CMS 類型在擁有stop-the-world時間很短的優勢的同時,也有以下缺點:工具
它會比其餘GC類型佔用更多的內存和CPU測試
默認狀況下不支持壓縮步驟,產生大量內存碎片,當有大內存須要升級到老年代代時候,連續空間不足,就會啓動先壓縮後gc的狀況,此時full gc就會佔用很長時間。優化
在使用這個GC類型以前你須要慎重考慮。若是由於內存碎片過多而致使壓縮任務不得不執行,那麼stop-the-world的時間要比其餘任何GC類型都長,你須要考慮壓縮任務的發生頻率以及執行時間。日誌
Parallel GC 和 CMS GC 最大的不一樣來自於壓縮任務。壓縮任務是經過刪除已分配內存空間中的空白空間以便壓縮內存,清理內存碎片。htm
在Parallel GC模式下,壓縮工做在Full GC執行時進行,這會費不少時間,可是,在執行完Full GC以後,因爲可以順序地分配空間,隨後的內存可以被更快的分配。對象
與之相反的,CMS GC並不進行壓縮處理,所以,CMS GC執行的更快。可是,因爲沒有壓縮,在進行磁盤清理以前,內存中會有不少空白空間。這就是說,可能沒有足夠的空間存儲大的對象,例如,雖然老年代空間還有300MB空間,可是一些10MB的對象沒法被順序的存儲。在這種狀況下,會出現「並行模式失敗」警告,並執行壓縮處理。在CMS GC模式下,壓縮處理的執行時間要比Parallel GCs長不少。事件
https://mp.weixin.qq.com/s/fiofT8tAxGgQuXnZBm3DJQ內存
GC監控ci
jstat 是HotSpot JVM提供的一個監控工具。
執行」jstat –gc 1000″ (或 1s)會每隔一秒展現GC監控數據。」jstat –gc 1000 10″會每隔1秒展示一次,且一共10次。
-gcutil 被用於檢查堆間的使用狀況,GC執行的次數以及GC操做所花費的時間。
-gccapacity以及其餘的參數能夠用於檢查實際分配內存的大小。
–verbosegc 參數在每次GC事件發生的時候都會輸出日誌,咱們能夠很輕易地觀察到GC操做對於堆空間的影響。-verbosegc 須要在啓動的時候指定
Visual GC能夠視做jstat的圖形化版本,
HPJMeter就至關於 –verbosgc的圖形化版本。
https://mp.weixin.qq.com/s/EwAmMR3SrLl_Fbx487WRVg
GC優化概括了兩個目的:
一個是將轉移到老年代的對象數量降到最少
另外一個是減小Full GC的執行時間。 (須要將老年代空間設定爲一個「合適」的值)
-Xms,-Xmx,啓動時堆大小,堆最大佔用大小
-XX:NewRatio,新老年代比例。
優化過程
1.分xi監控結果,決定是否進行GC優化
2.調整GC類型/內存空間,經過AB測試,相同環境相同流量,不一樣參數對比。
3.fenxi結果,修改後運行24小時以上,對結果進行對比fenxi,選擇最優方案。
若是GC執行時間知足下面全部的條件,就意味着無需進行GC優化了(固然數字不是絕對的)
Minor GC執行的很快(小於50ms)
Minor GC執行的並不頻繁(大概10秒一次)
Full GC執行的很快(小於1s)
Full GC執行的並不頻繁(間隔越久越好)
注意,不光看每次GC的時間,也要看GC的時間間隔。
https://mp.weixin.qq.com/s/_pfwmNWmQvPf279030uoTw
https://mp.weixin.qq.com/s/v-3g6k1CEk2lHBftzuNRkg
系列文章
http://www.importnew.com/22217.html
https://mp.weixin.qq.com/s/5YU7Hj3pP4NiWUtQDPqXoQ
https://mp.weixin.qq.com/s/qjFpDM4FgxKJB666inMeDg
https://mp.weixin.qq.com/s/Hn3ZwfIr8lCLgxIXhT5bJw
https://mp.weixin.qq.com/s/Xg6dEwJe6WqcU47Lux_XeA
https://mp.weixin.qq.com/s/eqCoS3BT1oZJ_SqK8q7l3A
https://mp.weixin.qq.com/s/984p9QI-rHAJ2d9mUhZ62A
https://mp.weixin.qq.com/s/H7V7Gc-Du-dMa1G3Vu6_Jg
https://mp.weixin.qq.com/s/V1MScd-Jo714rD8I7XNFnw