1
2
3
4
5
6
优化建议:
1、一般建议Xms等于Xmx,好处是避免每次gc后,调整堆的大小,减少系统内存分配开销
2、串行垃圾收集器(Serial + Serial Old | -XX:+UseSerialGC)
3、并行垃圾收集器(Parellel + Parellel Old),吞吐量优先(JVM server 模式 默认)
4、并发垃圾收集器(ParNew + CMS)响应时间优先
5、本次优化说明的JDK版本为 1.8

通用配置

1、java -Xmx2g -Xms2g -XX:MetaspaceSize=256m -XX:+UseConcMarkSweepGC

并发大,对象小

2、java -Xmx2g -Xms2g -Xmn512m -XX:MetaspaceSize=256m -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=2 -XX:+UseCMSCompactAtFullCollection

并发大,对象大

3、java -Xmx4g -Xms4g -Xmn2g -XX:MetaspaceSize=512m -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=2 -XX:+UseCMSCompactAtFullCollection

核心参数 说明 默认值 备注
-Xms 最小堆内存 默认为物理内存的1/64,不会超过1G
-Xmx 最大堆内存 默认为物理内存的1/4
-Xmn 新生代内存大小 默认值为-Xmx的3/8,老年代内存则为5/8 优先级较NewRatio高
-XX:NewRatio 新生代与老生代的内存的比值 2
-XX:SurvivorRatio Eden和2个存活区内存的比值 8
-XX:MetaspaceSize 元空间最小值 元空间并不在虚拟机中,而是使用本地内存
-XX:MaxMetaspaceSize 元空间最大值
-Xss 栈大小 1M
-XX:ParallelGCThreads 并行收集器的线程数 默认为服务器CPU数目 此值最好配置与处理器数目相等 同样适用于CMS不用设置
-XX:PretenureSizeThreshold 手动指定对象大小 当对象达到指定大小时直接存放到老年代中,由于新生代大多使用复制算法,为了节省复制消耗
-XX:MaxTenuringThreshold 手动设置对象在新生代中存活年龄(存活次数) 15
-XX:+UseConcMarkSweepGC 手动指定老年代使用CMS收集器
-XX:-CMSParallelRemarkEnabled 手动配置开启并行标记,节省年轻代标记时间 废弃
-XX:CMSInitiatingOccupancyFraction=80 手动指定当老年代已用空间达到80%时,触发老年代回收(默认92%) -1
-XX:+UseCMSCompactAtFullCollection 在进行Full GC时对内存进行压缩 JDK1.6以前不需要配置,默认开启
-XX:CMSFullGCsBeforeCompaction=2 与XX:+UseCMSCompactAtFullCollection关联使用标识着每经过多少次Full GC 0 触发对内存进行一次压缩,默认是0次