一、JVM参数类型
在生产环境中,一般情况下配置的参数有3种类型的:
- -X:非标准参数,不是每个虚拟机都实现了,例如-Xms2g
- -XX:非稳定性参数,例如-XX:NewSize=2g
使用方式有下面3种:
-XX:+<option> 开启option参数
-XX:-<option> 关闭option参数
-XX:-<option>=<value> 将option参数的值设置为value - -D:用于自定义参数,设置的值可以通过System.getProperty(String name)方法获取,例如:-Dlog.dir=/data/log
通过java -h命令,可以查看所有标准参数,常见的有-D、-version、-classpath
通过java -X命令,可以查看所有-X参数,常见的有-Xms、-Xmx、-Xss
二、内存管理参数
1、堆栈大小设置
参数 | 默认值 | 使用介绍 | 示例 |
---|---|---|---|
-Xms | 堆内存的1/64 | 堆的最小值 | -Xms6g |
-Xmx | 堆内存的1/4 | 堆的最大值 | -Xmx6g |
-Xss | 无 | 栈的大小 | -Xss1m |
-XX:NewSize | 无 | 堆中新生代的初始值 | -XX:NewSize=2g |
-XX:MaxNewSize | 无 | 堆中新生代的最大值 | -XX:MaxNewSize=4g |
-XX:PermSize | 无 | 方法区的初始值 | -XX:PermSize=256g |
-XX:MaxPermNewSize | 无 | 方法区的最大值 | -XX:MaxPermSize=512g |
-XX:NewRatio | 2 | 新生代和老年代的比值 | -XX:NewRatio=4 (表示新生代:老年代=1:4, 即新生代占堆的1/5) |
-XX:SurvivorRatio | 8 | 新生代中surviivor区和eden区的比值 | -XX:SurvivorRatio=8 (表示survivor:eden=1:8, 即一个survivor占新生代的1/10) |
-XX:+HeapDumpOnOutOfMemoryError | 默认关闭 | 发生OOM时自动dump堆转储文件 | |
-XX:HeapDumpPath | 无 | dump文件路径 | -XX:HeapDumpPath=/data/log/heapdump.bin |
2、垃圾回收设置
参数 | 默认值 | 使用介绍 | 示例 |
---|---|---|---|
-XX:+UseSerialGC | Client模式的虚拟机默认开启 | Client模式下,使用Serial+Serial Old的收集器组合进行垃圾回收 | |
-XX:+UseParNewGC | 默认关闭 | 使用ParNew+Serial Old的收集器组合进行垃圾回收 | |
-XX:+UseParallelGC | server模式的虚拟机默认开启 | 使用Parallel Scavenge+Serial Old的收集器组合进行垃圾回收 | |
-XX:+UseParallelOldGC | 默认关闭 | 使用Parallel Scavenge+Parallel Old的收集器组合进行垃圾回收 | |
-XX:+UseConcMarkSweepGC | 默认关闭 | 使用ParNew+CMS+Serial Old的收集器组合进行垃圾回收。如果CMS收集器出现Concurrent Mode Failure,则Serial Old收集器将作为后备收集器 | -XX:+UseConcMarkSweepGC |
-XX:ParallelCMSThreads | 小于等于8个CPU时默认值为CPU的个数,多于8个时比CPU的数量少 | 设置GC时进行内存回收的线程数 | -XX:ParallelCMSThreads=2 |
-XX:+PrintGCDetails | 默认关闭 | 发生垃圾回收时打印内存回收日志 | |
-XX:+PrintGCTimeStamps | 默认关闭 | 发生垃圾回收时打印回收时间 | |
-Xloggc | 无 | 设置GC记录的文件 | Xloggc:/data/log/tomcat/gc.log |
-XX:+UseGCLogFileRotation | 默认关闭 | 启用GC日志文件的自动转储 | |
-XX:GCLogFileSize | 默认关闭 | 控制GC日志文件的大小 | -XX:GCLogFileSize=1M |
3、多线程相关参数
参数 | 默认值 | 使用介绍 | 示例 |
---|---|---|---|
-XX:+UsedBiasedLocking | 默认开启 | 是否使用偏向锁 |
最后,给大家提供一个8核8G的机器常用的配置:
-Xms6g
-Xmx6g
-Xss1m
-XX:NewSize=2g
-XX:MaxNewSize=4g
-XX:NewRatio=4g
-XX:SurvivorRatio=8
-XX:+AggressiveOpts
-XX:+UseBiasedLocking
-XX:+UseConcMarkSweepGC
-XX:ParallelCMSThreads=2
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:/data/log/gc.log
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/data/log/heapdump.bin
-XX:+CMSParallelRemarkEnabled
-XX:+ScavengeBeforeFullGC
-XX:CMSInitiatingOccupancyFraction=75