JVM内存调优
在对JVM调优的过程中,很大一部分工作就是对于FullGC的调节
对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数,过多的GC和Full GC是会占用很多的系统资源(主要是CPU),影响系统的吞吐量。
特别要关注Full GC,因为它会对整个堆进行整理,导致Full GC一般由于以下几种情况:
- 旧生代空间不足
调优时尽量让对象在新生代GC时被回收、让对象在新生代多存活一段时间和不要创建过大的对象及数组避免直接在旧生代创建对象
- System.gc()被显示调用
垃圾回收不要手动触发,尽量依靠JVM自身的机制
- 调优手段主要是通过控制堆内存的各个部分的比例和GC策略来实现
1)新生代设置过小
一是新生代GC次数非常频繁,增大系统消耗;二是导致大对象直接进入旧生代,占据了旧生代剩余空间,诱发Full GC
2)新生代设置过大
一是新生代设置过大会导致旧生代过小(堆总量一定),从而诱发Full GC;二是新生代GC耗时大幅度增加,一般说来新生代占整个堆1/3比较合适
3)Survivor设置过小
导致对象从eden直接到达旧生代,降低了在新生代的存活时间
4)Survivor设置过大
导致e