程序媛一枚 2020-04-06
导致Full GC一般由于以下几种情况:
1)老年代空间不足
调优时尽量让对象在新生代(细分为Eden和幸存区)GC时被回收、让对象在新生代多存活一段时间(增大新生代内存或者调高晋升老年代的门槛)和不要创建过大的对象及数组避免直接在老年代创建对象
2)新生代设置过小
一是新生代GC次数非常频繁,增大系统消耗;二是导致大对象直接进入老年代,占据了老年剩余空间,诱发Full GC
3). 新生代设置过大
一是新生代设置过大会导致老年代过小(堆总量一定),从而诱发Full GC;二是新生代GC耗时大幅度增加
4). Survivor(幸存区)设置过小
导致对象从eden(伊甸园)直接到达老年代
5). Survivor设置过大
导致eden(伊甸园)过小,增加了GC频率
一般说来新生代占整个堆1/3比较合适
GC策略的设置方式
1). 吞吐量优先 可由-XX:GCTimeRatio=n来设置
2). 响应速度优先 可由-XX:MaxGCPauseRatio=n来设置