1. 程式人生 > 其它 >JVM-垃圾回收(4)

JVM-垃圾回收(4)

GC調優

確定目標

首先要確定專案的目的在於【低延遲】還是【高吞吐量】
比如網際網路專案要求的是低延遲高響應,而科學計算之類的專案則要求高吞吐量。

  • CMS、G1、ZGC(低延遲可選)
  • ParallelGC(高吞吐可選)

最快的GC是不發生GC

如果一個程式發生過於頻繁的GC,那麼就應該考慮以下幾點:

  • 是否是自己的程式碼載入了過多不必要的資料(比如操作資料庫的時候一次性讀取一大張表之類的操作)
  • 資料表示是否太臃腫
    • 物件圖
    • 物件大小
  • 是否發生記憶體洩漏

新生代調優

新生代的特點

  • 所有new操作的記憶體分配都非常廉價
  • 死亡物件的回收代價是零
  • 大部分物件用完即死亡
  • Minor GC時間遠低於Full GC

記憶體設定推薦

  • 新生代能容納所有【併發量*(請求-響應)】資料
  • 倖存區要求能保留【當前活躍物件+需要晉升物件】

老年代調優

老年代調優規則

以CMS為例

  • CMS的老年代記憶體越大越好
  • 先嚐試不做除錯,先嚐試調優新生代
  • 觀察發生Full GC時老年代佔用的記憶體,將老年代預設的記憶體調大1/4~1/3
    • -XX:CMSInitiatingOccupancyFraction=percent