JVM常用参数
-Xms:初始堆大小
-Xmm:最大堆大小
-Xmn:年轻代大小
-Xss:线程栈大小,默认1M
-XX:NewRatio:年轻代和年老代的比值
-XX:SurvivorRatio:Eden和两个Survivor的比值
-XX:UseParallel:年轻代设置并使用Parallel Scavenge
-XX:UseConcMarkSweepGC:年老代设置并使用CMS
JVM配置方面
设置初始堆大小-Xms和最大堆大小-Xmm相同,避免了堆动态变化的过程;
新生代尽量设置的大一些,让对象在新生代尽量多存活一段时间,每次Minor GC时可以尽可能多的收集垃圾对象,防止或延迟对象进入年老代,减少发生Full GC的频率;
设置Eden和Survivor区的比例(默认8:2)、年轻代和年老代的比例(默认1:2);
选择合适的垃圾收集器,一般使用ParaNew+CMS,调整合适的CMS的压缩率。
代码实现方面
避免创建过大的数组和对象,可能会直接进入年老代,并触发Full GC;
避免同时加载大量数据,可以分批加载,用完之后尽快清空;
对象使用完之后尽快清空引用,避免进入年老代;
避免长时间等待外部资源;
在合适的场景中使用软引用和弱引用。
JVM调优可使用的文件
系统运行日志、堆栈错误信息、gc日志、线程快照、堆转储快照