类型一: 标准参数选项

1.1-特点

比较稳定,后续版本基本不会变化
以-开头

1.2-各种选项

运行java或者java -help可以看到所有的标准选项
选项包括:

  • -d32 使用32位数据模型(如果可用)
  • -d64 使用64位数据模型(如果可用)
  • -server 选择”server”VM,默认VM是server.
  • -cp<目录和 zip/jar文件的类搜索路径>
  • -classpath<目录和 zip/jar文件的类搜索路径>
    • 用﹔分隔的目录,JAR档案
    • 和 ZIP档案列表,用于搜索类文件。
  • -D<名称>=<值> 设置系统属性
  • -verbose: [classlgcljni]
    • 启用详细输出
  • -version 输出产品版本并退出
  • -version:<值>
    • 警告:此功能已过时,
    • 将在未来发行版中删除。
    • 需要指定的版本才能运行
  • -showversion 输出产品版本并继续
  • -jre-restrict-search | -no-jre-restrict-search
    • 警告:此功能已过时,将在未来发行版中删除。
    • 在版本搜索中包括/排除用户专用JRE
  • -?-help 输出化帮助消息
  • -X 输出非标准选项的帮助
  • -ea[ :. ..| :]
  • -enableassertions [ : … | :]
    • 按指定的粒度启用断言
  • -da[ : . . .| :]
  • -disableassertions [ : . ..| :] 禁用具有指定粒度的断言
  • -esa | -enablesystemassertions 启用系统断言
  • -dsa | -disablesystemassertions 禁用系统断言
  • -agentlib:[=<选项>]
    • 加载本机代理库,例如 -agentlib:hprof
    • 另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
  • -agentpath : [=<选项>] 按完整路径名加载本机代理库
  • -javaagent :[=<选项>] 加载Java 编程语言代理,请参阅java.lang.instrument
  • -splash: 使用指定的图像显示启动屏幕

有关详细信息,请参阅
http://www.oracle.com/technetwork/java/javase/documentation/index.htm

1.3-补充内容:-server 与 -client

Hotspot JVM有两种模式,分别是server和client,分别通过-server和-client模式设置

  1. 在32位Windows系统上,默认使用client类型的JVM。要想使用Server模式,则机器配置至少有2个以上的CPU和2G以上的物理内存。client模式适用于对内存要求较小的桌面应用程序,默认使用Serial串行垃圾收集器
  2. 64位机器上只支持server模式的JVM,适用于需要大内存的应用程序,默认使用并行垃圾收集器

关于server和client的官网介绍为:
https://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html

类型二: -X参数选项

2.1-特点

  • 非标准化参数
  • 功能还是比较稳定的。但官方说后续版本可能会变更以
  • -X开头

    2.2-各种选项

    -Xmixed 混合模式执行(默认)
    -Xint 仅解释模式执行
    -Xbootclasspath:<用 ; 分隔的目录和 zip/jar 文件>
    设置引导类和资源的搜索路径
    -Xbootclasspath/a:<用 ; 分隔的目录和 zip/jar 文件>
    附加在引导类路径末尾
    -Xbootclasspath/p:<用 ; 分隔的目录和 zip/jar 文件>
    置于引导类路径之前
    -Xdiag 显示附加诊断消息
    -Xnoclassgc 禁用类垃圾收集
    -Xincgc 启用增量垃圾收集
    -Xloggc: 将 GC 状态记录在文件中(带时间戳)
    -Xbatch 禁用后台编译
    -Xms 设置初始 Java 堆大小
    -Xmx 设置最大 Java 堆大小
    -Xss 设置 Java 线程堆栈大小
    -Xprof 输出 cpu 分析数据
    -Xfuture 启用最严格的检查,预计会成为将来的默认值
    -Xrs 减少 Java/VM 对操作系统信号的使用(请参阅文档)
    -Xcheck:jni 对 JNI 函数执行其他检查
    -Xshare:off 不尝试使用共享类数据
    -Xshare:auto 在可能的情况下使用共享类数据(默认)
    -Xshare:on 要求使用共享类数据,否则将失败。
    -XshowSettings 显示所有设置并继续
    -XshowSettings:system
    (仅限 Linux)显示系统或容器
    配置并继续
    -XshowSettings:all
    显示所有设置并继续
    -XshowSettings:vm 显示所有与 vm 相关的设置并继续
    -XshowSettings:properties
    显示所有属性设置并继续
    -XshowSettings:locale
    显示所有与区域设置相关的设置并继续
    -X 选项是非标准选项。如有更改,恕不另行通知。

运行java -X命令可以看到所有的X选项

2.3-JVM的JIT编译模式相关的选项

-Xint

禁用JIT,所有字节码都被解释执行,这个模式的速度最慢的

-Xcomp

所有字节码第一次使用就都被编译成本地代码,然后再执行

-Xmixed

混合模式,默认模式,让JIT根据程序运行的情况,有选择地将某些代码编译成本地代码

2.4-特别地

-Xmx -Xms -Xss属于XX参数?

-Xms 设置初始Java堆大小,等价于-XX:InitialHeapSize
-Xmx 设置最大Java堆大小,等价于-XX:MaxHeapSize
-Xss 设置Java线程堆栈大小,-XX:ThreadStackSize

类型三: -XX参数选项

2.1-特点

  • 非标准化参数
  • 使用的最多的参数类型
  • 这类选项属于实验性,不稳定
  • 以-XX开头

    2.2-作用

    用于开发和调试JVM

    2.3-分类

    Boolean类型格式

    -XX:+

举例:
-XX:+UseParallelGC 选择垃圾收集器为并行收集器
-XX:+UseG1GC 表示启用G1收集器
-XX:+UseAdaptiveSizePolicy 自动选择年轻代区大小和相应的Survivor区比例

说明:因为有的指令默认是开启的,所以可以使用-关闭

非Boolean类型格式(key-value类型)

子类型1: 数值型格式-XX:
number表示数值,number可以带上单位,比如: ‘m’ 、‘M’表示兆,‘k’、‘K’表示Kb,’g’、’G’表示g(例如32k跟32768是一样的效果)
例如:
-XX:NewSize=1024m 表示设置新生代初始大小为1024兆
-XX:MaxGCPauseMillis=500 表示设置GC停顿时间:500毫秒
-XX:GCTimeRatio=19 表示设置吞吐量
-XX:NewRatio=2 表示新生代与老年代的比例

子类型2: 非数值型格式-XX:=
例如:
-XX:HeapDumpPath=/usr/local/heapdump. hprof用来指定heap转存文件的存储路径。

2.4-特别地

-XX:+PrintFlagsFinal

输出所有参数的名称和默认值
默认不包括Diagnostic和口Experimental的参数
可以配合 -XX:+UnlockDiagnosticVMOptions 和 -XX:UnlockExperimentalVMOptions使用