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