选项的分类
Hotspot JVM提供以下三大类选项:
- 标准选项:这类选项的功能是很稳定的,在后续版本中也不太会发生变化。运行java或者java -help可以看到所有的标准选项。所有的标准选项都是以-开头,比如-version, -server等。
- X选项:比如-Xms。这类选项都是以-X开头,可能由于这个原因它们被称为X选项。运行java -X命令可以看到所有的X选项。这类选项的功能还是很稳定,但官方的说法是它们的行为可能会在后续版本中改变,也有可能不在后续版本中提供了。
- XX选项:这类选项是属于实验性,主要是给JVM开发者用于开发和调试JVM的,在后续的版本中行为有可能会变化。
XX选项的语法
- 如果是布尔类型的选项,它的格式为-XX:+flag或者-XX:-flag,分别表示开启和关闭该选项。
- 针对非布尔类型的选项,它的格式为-XX:flag=value
内存相关
参数 | 描述 |
---|---|
-Xms | 最小堆内存 |
-Xmx | 最大堆内存 |
-Xss | 栈容量 |
-XX:+HeapDumpOnOutOfMemoryError | 表示在内存出现OOM的时候,把Heap转存(Dump)到文件以便后续分析,文件名通常是java_pid .hprof,其中pid为该程序的进程号。 |
-XX:HeapDumpPath=
| 用来指定heap转存文件的存储路径,需要指定的路径下有足够的空间来保存转存文件。-XX:HeapDumpPath=/tmp/heapdump.hprof |
-XX:OnOutOfMemoryError | 用来指定一个可行性程序或者脚本的路径,当发生OOM的时候,去执行这个脚本。-XX:OnOutOfMemoryError =“sh ~/cleanup.sh” |
-XX:NewSize | 新生代的最小值 |
-XX:MaxNewSize | 新生代的最大值 |
-XX:NewRatio | 用来设置老生代和新生代大小的比例,比如-XX:NewRatio=2表示1/3的Heap是新生代,2/3的Heap是老生代。使用这个选项的好处是新生代的大小也能随着Heap的变化而变化。 |
MaxDirectMemorySizes | 本机直接内存最大值 |
GC日志相关
参数 | 描述 |
---|---|
-XX:+PrintGC | 等同于-verbose:gc 表示打开简化的GC日志,相关输出如下: [GC 425355K->351685K(506816K), 0.2175300 secs] [Full GC 500561K->456058K(506816K), 0.6421920 secs] |
-XX:+PrintGCDetails | 这个选项会打印出更多的GC日志,不同的收集器产生的日志会不一样。 |
-XX:+PrintGCTimeStamps | 把GC的时间戳显示在GC的日志中,打印GC发生的时间相对于JVM启动的时间 |
-XX:+PrintGCDateStamps | 把GC的时间戳显示在GC的日志中,打印出GC发生的具体时间。 |
-Xloggc: | 表示把GC日志写入到一个文件中去,而不是打印到标准输出中。 |
垃圾收集器相关
参数 | 描述 |
---|---|
-XX:+UseSerialGC | 虚拟机运行在Client模式下的默认值,打开此开关,使用Serial+Serial Old收集器组合 |
-XX:+UseParNewGC | 打开此开关,使用ParNew+Serial Old 组合 |
-XX:+UseConcMarkSweepGC | 打开此开关,使用ParNew + CMS + Serial Old组合,Serial Old作为CMS出现 Concurrent Mode Failure 失败后的后背收集器 |
-XX:+UseG1GC | 打开此开关后,使用G1 收集器 |
-XX:+UseParallelGC | 虚拟机运行在Server模式下的默认值,打开此开关后,使用 Parallel Scavenge + Serial Old(PS MarkSweep)组合 |
-XX:+UseParallelOldGC | 打开此开关后,使用Parallel Scavenge + Parallel Old的组合 |
-XX:+SuvivorRatio | 新生代中,Eden区域与Survivor区域的容量比值,默认为8,代表Eden:Survivor=8:1 |
-XX:+PretenureSizeThreshold | 对象直接晋升到老年代的对象大小,设置此参数后,大于此参数的对象将直接分配在老年代 |
-XX:+MaxTenuringThreshold | 对象晋升到老年代的年龄(默认为15)。每个对象在坚持过一次Minor GC之后,年龄加1,当超过这个参数值时,就进入老年代 |
-XX:+UseAdaptiveSizePolicy | 对台调整Java堆中各个区域的大小以及进入老年代的年龄 |
-XX:+HandlePromotionFailure | 是否允许分配担保失败,即老年代的剩余空间不足以应付新生代的整个Eden和Survivor区的所有对象都存活的几段情况 |
-XX:+ParallelGCThreads | 设置并行GC时进行内存回收的线程数 |
-XX:+GCTimeRatio | GC时间占总时间的比率,默认值为99,即允许1%的GC时间,仅在使用Parallel Scavenge收集器时生效 |
-XX:+MaxGCPauseMillis | 设置GC的最大停顿时间。仅在使用Parallel Scavenge收集器时生效 |
-XX:+CMSInitiatingOccupancyFraction | 设置CMS收集器在老年代空间被使用多少后触发垃圾收集。默认值为68%,仅在使用CMS收集器时生效 |
-XX:+UseCMSCompactAtFullCollection | 设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片整理。仅在使用CMS收集器时生效 |
-XX:+CMSfullGCsBeforeCompaction | 设置CMS收集器在进行若干次垃圾收集后再启动一次内存碎片整理。仅在使用CMS收集器时生效 |
其他
参数 | 描述 |
---|---|
-XX:+PrintCommandLineFlags | 与-showversion类似 可以让在程序运行前打印出用户手动设置或者JVM自动设置的XX选项 建议加上这个选项以辅助问题诊断 java -XX:+PrintCommandLineFlags -version 不能指定具体的LVMID? |
-XX:+PrintFlagsInitial | 打印出所有XX选项的默认值 |
-XX:+PrintFlagsFinal | 打印出XX选项在运行程序时生效的值 |
参考资料
【Hotspot JVM的常用选项】https://www.zybuluo.com/jewes/note/57352