参数来源:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

类型一:标准参数选项[了解即可]

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

各种选项

直接在DOS窗口中运行java或者java -help可以看到所有的标准选项

  1. -d32 使用 32 位数据模型 (如果可用)
  2. -d64 使用 64 位数据模型 (如果可用)
  3. -server 选择 "server" VM
  4. 默认 VM server.
  5. -cp <目录和 zip/jar 文件的类搜索路径>
  6. -classpath <目录和 zip/jar 文件的类搜索路径>
  7. ; 分隔的目录, JAR 档案
  8. ZIP 档案列表, 用于搜索类文件。
  9. -D<名称>=<值>
  10. 设置系统属性
  11. -verbose:[class|gc|jni]
  12. 启用详细输出
  13. -version 输出产品版本并退出
  14. -version:<值>
  15. 警告: 此功能已过时, 将在
  16. 未来发行版中删除。
  17. 需要指定的版本才能运行
  18. -showversion 输出产品版本并继续
  19. -jre-restrict-search | -no-jre-restrict-search
  20. 警告: 此功能已过时, 将在
  21. 未来发行版中删除。
  22. 在版本搜索中包括/排除用户专用 JRE
  23. -? -help 输出此帮助消息
  24. -X 输出非标准选项的帮助
  25. -ea[:<packagename>...|:<classname>]
  26. -enableassertions[:<packagename>...|:<classname>]
  27. 按指定的粒度启用断言
  28. -da[:<packagename>...|:<classname>]
  29. -disableassertions[:<packagename>...|:<classname>]
  30. 禁用具有指定粒度的断言
  31. -esa | -enablesystemassertions
  32. 启用系统断言
  33. -dsa | -disablesystemassertions
  34. 禁用系统断言
  35. -agentlib:<libname>[=<选项>]
  36. 加载本机代理库 <libname>, 例如 -agentlib:hprof
  37. 另请参阅 -agentlib:jdwp=help -agentlib:hprof=help
  38. -agentpath:<pathname>[=<选项>]
  39. 按完整路径名加载本机代理库
  40. -javaagent:<jarpath>[=<选项>]
  41. 加载 Java 编程语言代理, 请参阅 java.lang.instrument
  42. -splash:<imagepath>
  43. 使用指定的图像显示启动屏幕

补充内容:-server与-client

image.png
对于以上第2点,我们可以打开DOS窗口,输入java -version就可以看到64位机器上用的server模式,如下所示:

image.png

类型二:-X参数选项

特点

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

各种选项

  1. 直接在DOS窗口中运行java -X命令可以看到所有的X选项
  1. -Xmixed 混合模式执行 (默认)
  2. -Xint 仅解释模式执行
  3. -Xcomp 仅采用即时编译器模式
  4. -Xbootclasspath:<用 ; 分隔的目录和 zip/jar 文件>
  5. 设置搜索路径以引导类和资源
  6. -Xbootclasspath/a:<用 ; 分隔的目录和 zip/jar 文件>
  7. 附加在引导类路径末尾
  8. -Xbootclasspath/p:<用 ; 分隔的目录和 zip/jar 文件>
  9. 置于引导类路径之前
  10. -Xdiag 显示附加诊断消息
  11. -Xnoclassgc 禁用类垃圾收集
  12. -Xincgc 启用增量垃圾收集
  13. -Xloggc:<file> GC 状态记录在文件中 (带时间戳)
  14. -Xbatch 禁用后台编译
  15. -Xms<size> 设置初始 Java 堆大小
  16. -Xmx<size> 设置最大 Java 堆大小
  17. -Xss<size> 设置 Java 线程堆栈大小
  18. -Xprof 输出 cpu 配置文件数据
  19. -Xfuture 启用最严格的检查, 预期将来的默认值
  20. -Xrs 减少 Java/VM 对操作系统信号的使用 (请参阅文档)
  21. -Xcheck:jni JNI 函数执行其他检查
  22. -Xshare:off 不尝试使用共享类数据
  23. -Xshare:auto 在可能的情况下使用共享类数据 (默认)
  24. -Xshare:on 要求使用共享类数据, 否则将失败。
  25. -XshowSettings 显示所有设置并继续
  26. -XshowSettings:all
  27. 显示所有设置并继续
  28. -XshowSettings:vm 显示所有与 vm 相关的设置并继续
  29. -XshowSettings:properties
  30. 显示所有属性设置并继续
  31. -XshowSettings:locale
  32. 显示所有与区域设置相关的设置并继续
  33. -X 选项是非标准选项,如有更改,恕不另行通知

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

  1. -Xint :只使用解释器:所有字节码都被解释执行,这个模式的速度是很慢的<br /> -Xcomp :只使用编译器:所有字节码第一次使用就被编译成本地代码,然后在执行<br /> -Xmixed:混合模式:这是默认模式,刚开始的时候使用解释器慢慢解释执行,后来让JIT即时编译器根据程序运行的情况,有选择地将某些热点代码提前编译并缓存在本地,在执行的时候效率就非常高了<br /> 默认使用的就是这种模式,证明如下:<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/350923/1662873493908-1e55eb02-7ffe-435a-a16a-caae3d853ec2.png#clientId=u86c02c1f-0d25-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=108&id=u996d1f4e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=108&originWidth=780&originalType=binary&ratio=1&rotation=0&showTitle=false&size=15176&status=done&style=none&taskId=u93e397c1-917d-4e1b-a363-3bdb142e1de&title=&width=780)

特别地

-Xmx -Xms -Xss属于XX参数?
单位:k/K、m/M、g/G
设置:-Xmx、-Xms最好设置成一样的值,避免扩容带来的损耗

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

类型三:-XX参数选项[重点]

特点

非标准化参数
使用的最多的参数类型
这类选项属于实验性,不稳定(后续优化可能会增加参数或者删除已有的配置)
以-XX开头

作用

用于开发和调试JVM

分类

Boolean类型格式

  1. -XX:+<option> 表示启用option属性<br /> -XX:-<option>表示禁用option属性<br /> 举例<br /> ![image.png](https://cdn.nlark.com/yuque/0/2022/png/350923/1662873914264-e690f50d-bcf8-44a6-81c4-c44b18c10428.png#clientId=u86c02c1f-0d25-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=105&id=uee879739&margin=%5Bobject%20Object%5D&name=image.png&originHeight=105&originWidth=682&originalType=binary&ratio=1&rotation=0&showTitle=false&size=74443&status=done&style=none&taskId=u0eec6091-ff94-45ac-a60e-b76b185051b&title=&width=682)<br /> 说明:因为有的指令默认是开启的,所以可以使用-关闭

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

  1. 子类型1:数值型格式-XX:<option>=<number><br /> ![image.png](https://cdn.nlark.com/yuque/0/2022/png/350923/1662873931662-3039ed46-7de8-4281-afdb-601b8d718476.png#clientId=u86c02c1f-0d25-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=234&id=u88cefaf8&margin=%5Bobject%20Object%5D&name=image.png&originHeight=234&originWidth=735&originalType=binary&ratio=1&rotation=0&showTitle=false&size=148162&status=done&style=none&taskId=ue8e279d9-f6e0-478c-ad57-2abd7dcc986&title=&width=735)
  2. 子类型2:非数值型格式-XX:<name>=<string><br /> ![image.png](https://cdn.nlark.com/yuque/0/2022/png/350923/1662873939126-761d6207-5f11-43b5-876c-8d7ca2719efd.png#clientId=u86c02c1f-0d25-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=88&id=u24a9f561&margin=%5Bobject%20Object%5D&name=image.png&originHeight=88&originWidth=729&originalType=binary&ratio=1&rotation=0&showTitle=false&size=42557&status=done&style=none&taskId=u1a3aa7a7-9e2a-4944-bb82-20c571492c7&title=&width=729)

特别地

-XX:+PrintFlagsFinal

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