根據(jù)應(yīng)用的各自的業(yè)務(wù)特點(diǎn)和需求,選擇合理的垃圾回收器搭配扛邑。
首先督函,列舉跟垃圾回收器性能相關(guān)的幾個(gè)指標(biāo):
吞吐量(Throughput)
系統(tǒng)的吞吐量=用戶代碼運(yùn)行時(shí)間/(用戶代碼運(yùn)行時(shí)間+垃圾收集時(shí)間)帆调,用于度量系統(tǒng)的運(yùn)行效率。
垃圾回收開銷(Garbage Collection overhead)
垃圾回收開銷=垃圾回收時(shí)間/(垃圾回收時(shí)間+用戶代碼運(yùn)行時(shí)間)迁匠,即回收時(shí)間占總時(shí)間的比率剩瓶。
注意:垃圾回收開銷+吞吐量=1,即系統(tǒng)吞吐量高了城丧,其垃圾回收開銷就低延曙;系統(tǒng)吞吐量低了,垃圾回收開銷就高了
暫停時(shí)間間隔(Pause time)
暫停時(shí)間間隔是指Java虛擬機(jī)在回收垃圾的時(shí)亡哄,暫停所有應(yīng)用線程的執(zhí)行的總時(shí)間枝缔。
對(duì)于串行回收器,停頓時(shí)間可能會(huì)比較長蚊惯。對(duì)于并發(fā)的回收器愿卸,由于垃圾回收器和應(yīng)用程序交替運(yùn)行,程序的停頓時(shí)間會(huì)變短截型,但是其效率很可能不如獨(dú)占垃圾回收器趴荸,則系統(tǒng)的吞吐量可能會(huì)較低。
回收頻率(Frequency of collection)
平均多久發(fā)生一次垃圾回收宦焦。
內(nèi)存占用的大小(Footprint)
如堆的大小发钝。
實(shí)時(shí)性(Promptness)
自一個(gè)對(duì)象死亡起,經(jīng)過多久該對(duì)象所占用內(nèi)存被回收波闹。
其次酝豪,將應(yīng)用劃分為幾個(gè)類型:
(1)高吞吐量應(yīng)用
新生代Parallel Scavenge+老年代Parallel Old
建議參數(shù)配置1:
-Xmx4g -Xms4g -Xmn2g -Xss200k -XX:+UseParallelGC -XX:ParallelGCThreads=8 -XX:+UseParallelOldGC
建議配置參數(shù)2:
-Xmx4g -Xms4g -Xmn2g -Xss200k -XX:+UseParallelGC -XX:MaxGCPauseMills=100 -XX:+UseAdaptiveSizePolicy
(2)低延遲應(yīng)用或者快速響應(yīng)時(shí)間應(yīng)用
ParNew新生代+老年代CMS
建議配置參數(shù):
-Xmx4g -Xms4g -Xmn2g -Xss200k -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
(3)單核或者內(nèi)存較小應(yīng)用
新生代Serial + 老年代Serial Old