1. 降低Minor GC頻率
Minor GC的時間分為兩部分:掃描新生代和復(fù)制存活對象時間。
如果堆中短期的對象很多,擴容新生代的大小(雖然會增加掃描新生代的時間,但同時也會縮短復(fù)制對象的時間,因為減少了存回對象的數(shù)量。對于老年代來說,進(jìn)行Major,甚至是Full GC來說,所需要的時間也會減少。PS:掃描對象成本明顯低于復(fù)制存活對象的成本)。
如果堆中長期存活的對象很多,則不應(yīng)該增加新生代的大小,因為會增加Minor GC的時間(掃描和復(fù)制存活對象的時間,都不會減少)。
2. 降低Full GC頻率
2.1 減少大對象的創(chuàng)建:
會超過所設(shè)置的大對象大小的閾值,直接進(jìn)入老年代;
即使沒有超過所設(shè)置的大對象大小的閾值,在新生代空間有限的情況下,根據(jù)空間分配擔(dān)保也會有大幾率被分配到老年代。
2.2 增大堆內(nèi)空間設(shè)置
初始化堆內(nèi)存和最大堆內(nèi)存大小相同,也可以降低Full GC的頻率。也會減少內(nèi)存自動擴容、自動降容的成本。
3. 選擇適當(dāng)?shù)腉C回收器
對單次操作的響應(yīng)時間有優(yōu)先的要求,可以選擇CMS和G1收集器堆系統(tǒng)吞吐量有優(yōu)先的要求,可以選擇Parallel Scavenge收集器。