JVM调优主要是针对内存管理,包括各个代的大小分片和GC的选择。由于GC发生时会导致应用进程被挂起,所有,JVM调优的主要目的就是尽量减小GC对应用进程的影响,减少Full GC,避免Stop-The-World的放生。
常用调优参数
-Xms,-Xmx:配置堆内存大小。通常为了避免在运行时频繁的分配堆内存,会将这两个参数设置相同的值。
-Xmn:配置新生代空间的大小。新生代Eden,From,To三个区域的比例可以通-XX:ServivorRatio来配置。例如,若 -XX:ServivorRatio=4,那么,Eden:From:To = 4:3:3
-XX:PermSize,-XX:MaxPermSize:配置方法区内存大小。通常设置为相同的值。
-XX:MaxTenuringThreshold:控制对象在经过多少次minor GC之后进入老年代,此参数只有在Serial 串行GC时有效。
-XX:+PrintGCDetails:输出GC的详细信息
-XX:+PrintGCTimeStamps:输出发生GC的时间。
-Xloggc:c:\Java\gc.log:记录GC日志到文件中。
常见的调优策略
1.避免将新生代设置的过小。
如果新生代过小,那么就会频繁的出现Minor GC,这样就会使对象进入老年代的几率增大,当老年代被占用过多时,就会频繁触发Full GC,造成Stop-the-World。
2.避免将新生代设置的过大。
因为如果新生代过大就会导致老年代变小,触发Full GC的几率就增加了,同时,也会导致Minor GC的频率降低,使一些该回收的对象没有得到及时的回收。
3.合理设置对象在新生代中的存活周期
新生代存活周期的值决定了新生代对象在经过多少次Minor GC后进入老年代。因此这个值要根据自己的应用来调优,Jvm参数上这个值对应的为-XX:MaxTenuringThreshold,默认值为15次。