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