JAVA系列之JVM内存调优( 二 )

java -server -Xmx4g -Xms4g -Xmn2g –Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxMetaspaceSize=16m -XX:MaxTenuringThreshold=0

-XX:NewRatio=4: 设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代) 。设置为4 , 则年轻代与年老代所占比值为1:4 , 年轻代占整个堆栈的1/5-XX:SurvivorRatio=4: 设置年轻代中Eden区与Survivor区的大小比值 。设置为4 , 则两个Survivor区与一个Eden区的比值为2:4 , 一个Survivor区占整个年轻代的1/6-XX:MaxMetaspaceSize=16m: 设置元空间最大可分配大小为16m 。-XX:MaxTenuringThreshold=0: 设置垃圾最大年龄 。如果设置为0的话 , 则年轻代对象不经过Survivor区 , 直接进入年老代 。对于年老代比较多的应用 , 可以提高效率 。如果将此值设置为一个较大值 , 则年轻代对象会在Survivor区进行多次复制 , 这样可以增加对象再年轻代的存活时间 , 增加在年轻代即被回收的概率 。
2、垃圾回收器选择JVM给了三种选择:串行收集器、并行收集器、并发收集器 , 但是串行收集器只适用于小数据量的情况 , 所以这里的选择主要针对并行收集器和并发收集器 。默认情况下 , JDK5.0以前都是使用串行收集器 , 如果想使用其他收集器需要在启动时加入相应参数 。JDK5.0以后 , JVM会根据当前系统配置进行判断 。
2.1 吞吐量优先的并行收集器java -server -Xmx4g -Xms4g -Xmn2g –Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC -XX:+UseAdaptiveSizePolicy
-XX:+UseParallelGC:选择垃圾收集器为并行收集器 。此配置仅对年轻代有效 。即上述配置下 , 年轻代使用并发收集 , 而年老代仍旧使用串行收集 。-XX:ParallelGCThreads=20:配置并行收集器的线程数 , 即:同时多少个线程一起进行垃圾回收 。此值最好配置与处理器数目相等 。-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集 。JDK6.0支持对年老代并行收集 。-XX:+UseAdaptiveSizePolicy:设置此选项后 , 并行收集器会自动选择年轻代区大小和相应的Survivor区比例 , 以达到目标系统规定的最低相应时间或者收集频率等 , 此值建议使用并行收集器时 , 一直打开 。
2.2 响应时间优先的并发收集器java -server -Xmx4g -Xms4g -Xmn2g –Xss128k -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection
-XX:+UseConcMarkSweepGC: 设置年老代为并发收集-XX:+UseParNewGC: 设置年轻代为并行收集 。可与CMS收集同时使用-XX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩、整理 , 所以运行一段时间以后会产生“碎片” , 使得运行效率降低 。此值设置运行多少次GC以后对内存空间进行压缩、整理 。-XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩 。可能会影响性能 , 但是可以消除碎片
3、其他辅助配置GC日志打印
-XX:+PrintGC:输出形式:[GC 118250K->113543K(130112K), 0.0094143 secs] [Full GC 121376K->10414K(130112K), 0.0650971 secs]-XX:+PrintGCDetails:输出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs] [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]
OOM生成dump文件
-XX:+HeapDumpOnOutOfMemoryError 表示jvm发生oom异常时 , 自动生成dump文件-XX:HeapDumpPath= 表示生成dump文件的存放目录

经验总结扩展阅读