JVM-垃圾回收(4)
阿新 • • 發佈:2022-05-09
GC調優
確定目標
首先要確定專案的目的在於【低延遲】還是【高吞吐量】
比如網際網路專案要求的是低延遲高響應,而科學計算之類的專案則要求高吞吐量。
- CMS、G1、ZGC(低延遲可選)
- ParallelGC(高吞吐可選)
最快的GC是不發生GC
如果一個程式發生過於頻繁的GC,那麼就應該考慮以下幾點:
- 是否是自己的程式碼載入了過多不必要的資料(比如操作資料庫的時候一次性讀取一大張表之類的操作)
- 資料表示是否太臃腫
- 物件圖
- 物件大小
- 是否發生記憶體洩漏
新生代調優
新生代的特點
- 所有new操作的記憶體分配都非常廉價
- 死亡物件的回收代價是零
- 大部分物件用完即死亡
- Minor GC時間遠低於Full GC
記憶體設定推薦
- 新生代能容納所有【併發量*(請求-響應)】資料
- 倖存區要求能保留【當前活躍物件+需要晉升物件】
老年代調優
老年代調優規則
以CMS為例
- CMS的老年代記憶體越大越好
- 先嚐試不做除錯,先嚐試調優新生代
- 觀察發生Full GC時老年代佔用的記憶體,將老年代預設的記憶體調大1/4~1/3
- -XX:CMSInitiatingOccupancyFraction=percent