如何優化Java垃圾回收機制

我爲GC優化概括了兩個目的:優化

  1. 一個是將轉移到老年代的對象數量降到最少
  2. 另外一個是減小Full GC的執行時間

將轉移到老年代的對象數量降到最少對象

按代的GC機制由Oracle JVM提供,不包括能夠在JDK7以及更高版本中使用的G1 GC。換句話說,對象被建立在伊甸園空間,然後轉化到倖存者空間,最終剩餘的對象被送到老年代。某些比較大的對象會在被建立在伊甸園空間後,直接轉移到老年代空間。老年代空間上的GC處理會新生代花費更多的時間。所以,減小被移到老年代對象的數據能夠顯著地減小Full GC的頻率。減小被移到老年代空間的對象的數量,可能被誤解爲將對象留在新生代。可是,這是不可能的。取而代之,你能夠調整新生代空間的大小。數據

減小Full GC執行時間時間

Full GC的執行時間比Minor GC要長不少。所以,若是Full GC花費了太多的時間(超過1秒),一些鏈接的部分可能會發生超時錯誤。錯誤

  • 若是你試圖經過消減老年代空間來減小Full GC的執行時間,可能會致使OutOfMemoryError 或者 Full GC執行的次數會增長。
  • 與之相反,若是你試圖經過增長老年代空間來減小Full GC執行次數,執行時間會增長。

所以,你須要將老年代空間設定爲一個「合適」的值。版本

相關文章
相關標籤/搜索