對JVM內(nèi)存的系統(tǒng)級的調(diào)優(yōu)主要的目的是減少GC的頻率和Full GC的次數(shù)。
1. Full GC
會對整個堆進行整理,包括Young、Tenured和Perm。Full GC因為需要對整個堆進行回收,所以比較慢,因此應該盡可能減少Full GC的次數(shù)。
2. 導致Full GC的原因
2.1 年老代(Tenured)被寫滿
調(diào)優(yōu)時盡量讓對象在新生代GC時被回收、讓對象在新生代多存活一段時間和不要創(chuàng)建過大的對象及數(shù)組避免直接在舊生代創(chuàng)建對象 。
2.2 持久代Pemanet Generation空間不足
增大Perm Gen空間,避免太多靜態(tài)對象 , 控制好新生代和舊生代的比例
2.3 System.gc()被顯示調(diào)用
垃圾回收不要手動觸發(fā),盡量依靠JVM自身的機制
在對JVM調(diào)優(yōu)的過程中,很大一部分工作就是對于FullGC的調(diào)節(jié),下面詳細介紹對應JVM調(diào)優(yōu)的方法和步驟。