jvm有很多参数可供用户配置 记肯定是不现实,而且不同的版本还有些不一样 只需记住几个比较重要的参数就行
HotSport
参数格式分类
- 标准
-
号开头 如 java -version - 非标准
-X
开头 特定的版本支持 实验性参数 如 java -Xms - 不稳定
-XX
开头 后续版本可能不被支持 如 java -XX:+UseSerialGC
-XX:+PrintFlagsInitial 打印所有的默认参数设置
-XX:+PrintFlagsFinal 打印最终值,如果某个默认值被新值覆盖,显示新值 如果是覆盖的值赋值运算符号为:=
java -XX:+PrintFlagsInitial |grep G1 |
-XX:+PrintCommandLineFlags 打印那些被新值覆盖的项
不区分垃圾回收器常用的共用参数
-Xms128m JVM初始分配堆内存
-Xmx512m JVM最大允许分配的堆内存,按需分配
Serial
-XX:+UseSerialGC |
表示年轻代使用 serialGC 老年代使用 serial old 组合
ParNew
-XX:+UseParNewGC |
新生代使用 ParNew GC 老年代默认还是Serial Old GC ,如果要使用cms 作为老年代回收器 -XX:+UseConcMarkSweepGC
Parallel Scavenge
ps与parNew的功能区别上 ps支持吞吐量优先策略。
-XX:UseParallelGC |
使用 Parallel Scavenge GC + Parallel Old GC 组合策略 是jdk8中的默认组合,单独使用 -XX:UseParallelOldGC 参数 新生代默认也会使用Parallel Scavenge,它两差不多
-XX:ParallelGCThreads 设置年轻代 Parallel Scavenge GC 线程数
-XX:MaxGCPauseMillis 设置垃圾回收器最大停顿时间(即 STW 的时间),单位是毫秒
-XX:+UseAdaptiveSizePolicy 设置Parallel Scavenge GC 具有自适应调节策略。在这种模式下,年轻代的大小、Eden 和 Survivor 的比例、晋升老年代的对象年龄等参数会被自动调整,已达到在堆大小、吞吐量和停顿时间之间的平衡点。
CMS
-XX:+UseConcMarkSweepGC |
启用cms垃圾回收 此参数默认组合为 parNew + cms+ serial old 老年版的串行回收是因为cms在回收的时候用户线程内存不足会启用serial old来回收
-XX:CMSInitiatingOccupanyFraction 内存使用率阈值,一旦超过该阈值,便开始回收
-XX:+UseCMSCompactAtFullCollection 指定在执行完 Full GC 后对内存进行压缩整理,以避免内存碎片的产生
-XX:CMSFullGCBeforeCompaction 设置在执行多少次 Full GC 后对内存空间进行压缩整理
-XX:ParallelCMSThread 设置CMS 线程数,默认 (ParallelGCThreads + 3) / 4
G1
G1不分代了 参数就简单很多 一般情况下一个启用参数就够用了,用G1回收一般不建议去指定年轻代的大小 让它自己调整更好。
-XX:+UseG1GC |
-XX:InitiatingHeapOccupancyPercent 触发GC周期的Java 堆占用率阈值,超过此值,触发 GC。默认 45
-XX:G1HeapReagionSize 设置region的大小 必须是2的次幂
-XX:MaxGCPauseMillis 期望达到的最大GC 停顿时间 默认是200ms Parallel Scavenge GC中也有类似的参数 JVM会根据这个参数来优先回收有价值的region。
-XX:ParalledGCThread 设置 STW 工作线程数,最大为 8
-XX:ConcGCThreads 设置并发标记线程数,一般设置为 ParalledGCThread 的 1/4 左右
另外就是生产环境一般会设置GC日志和堆信息相关的参数 就是怕万一内存溢出等异常情况能拿到异常时的堆内存以及GC日志来分析问题。
-XX:+PrintGCDetails 打印GC详情
-XX:+PrintGCDateStamps 打印GC时间戳
-XX:+PrintHeapAtGC 打印GC日志的时候输出堆信息
-Xloggc:logs/gc.log 生成GC日志文件
-XX:+UseGCLogFileRotation 开启滚动生成日志
-XX:NumberOfGCLogFiles=5 滚动GC日志文件数,默认0,不滚动
-XX:GCLogFileSize=20M GC文件滚动大小,需开启UseGCLogFileRotation
-XX:+HeapDumpOnOutOfMemoryError 发生内存错误的时候导出堆信息
-XX:HeapDumpPath=logs/1.dump 发生内存错误的时候导出堆信息的路径 一般和HeapDumpOnOutOfMemoryError 配合使用。