1. 程式人生 > >如何優化Java垃圾回收機制

如何優化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執行次數,執行時間會增加。

因此,你需要將老年代空間設定為一個“合適