第1章、JVM参数选项
- 官方文档:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
1、类型1:标准参数选项
【1】特点
- 比较稳定,后续版本基本不会变化
- 以-开头
【2】各种选项
- 直接在DOS窗口中运行java或者java -help可以看到所有的标准选项
C:\Users\AlphonseKino>java
用法: java [-options] class [args...]
(执行类)
或 java [-options] -jar jarfile [args...]
(执行 jar 文件)
其中选项包括:
-d32 使用 32 位数据模型 (如果可用)
-d64 使用 64 位数据模型 (如果可用)
-server 选择 "server" VM
默认 VM 是 server.
-cp <目录和 zip/jar 文件的类搜索路径>
-classpath <目录和 zip/jar 文件的类搜索路径>
用 ; 分隔的目录, JAR 档案
和 ZIP 档案列表, 用于搜索类文件。
-D<名称>=<值>
设置系统属性
-verbose:[class|gc|jni]
启用详细输出
-version 输出产品版本并退出
-version:<值>
警告: 此功能已过时, 将在
未来发行版中删除。
需要指定的版本才能运行
-showversion 输出产品版本并继续
-jre-restrict-search | -no-jre-restrict-search
警告: 此功能已过时, 将在
未来发行版中删除。
在版本搜索中包括/排除用户专用 JRE
-? -help 输出此帮助消息
-X 输出非标准选项的帮助
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
按指定的粒度启用断言
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
禁用具有指定粒度的断言
-esa | -enablesystemassertions
启用系统断言
-dsa | -disablesystemassertions
禁用系统断言
-agentlib:<libname>[=<选项>]
加载本机代理库 <libname>, 例如 -agentlib:hprof
另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
-agentpath:<pathname>[=<选项>]
按完整路径名加载本机代理库
-javaagent:<jarpath>[=<选项>]
加载 Java 编程语言代理, 请参阅 java.lang.instrument
-splash:<imagepath>
使用指定的图像显示启动屏幕
有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html
【3】补充内容:-server与-client
-
Hotspot JVM有两种模式,分别是server和client,分别通过-server和-client模式设置
-
32位系统上,默认使用Client类型的JVM。要想使用Server模式,机器配置至少有2个以上的CPU和2G以上的物理内存。client模式适用于对内存要求较小的桌面应用程序,默认使用Serial串行垃圾收集器
-
64位系统上,只支持server模式的JVM,适用于需要大内存的应用程序,默认使用并行垃圾收集器
-
-
官网地址:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html
-
如何知道系统默认使用的是那种模式呢?
-
通过java -version命令:可以看到Server VM字样,代表当前系统使用是Server模式
C:\Users\AlphonseKino>java -version java version "1.8.0_151" Java(TM) SE Runtime Environment (build 1.8.0_151-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
-
2、类型2:-X参数选项
【1】特点
- 非标准化参数
- 功能还是比较稳定的。但官方说后续版本可能会变更
- 以-X开头
【2】各种选项
- 直接在DOS窗口中运行java -X命令可以看到所有的X选项
C:\Users\AlphonseKino123>java -X
-Xmixed 混合模式执行 (默认)
-Xint 仅解释模式执行
-Xbootclasspath:<用 ; 分隔的目录和 zip/jar 文件>
设置搜索路径以引导类和资源
-Xbootclasspath/a:<用 ; 分隔的目录和 zip/jar 文件>
附加在引导类路径末尾
-Xbootclasspath/p:<用 ; 分隔的目录和 zip/jar 文件>
置于引导类路径之前
-Xdiag 显示附加诊断消息
-Xnoclassgc 禁用类垃圾收集
-Xincgc 启用增量垃圾收集
-Xloggc:<file> 将 GC 状态记录在文件中 (带时间戳)
-Xbatch 禁用后台编译
-Xms<size> 设置初始 Java 堆大小
-Xmx<size> 设置最大 Java 堆大小
-Xss<size> 设置 Java 线程堆栈大小
-Xprof 输出 cpu 配置文件数据
-Xfuture 启用最严格的检查, 预期将来的默认值
-Xrs 减少 Java/VM 对操作系统信号的使用 (请参阅文档)
-Xcheck:jni 对 JNI 函数执行其他检查
-Xshare:off 不尝试使用共享类数据
-Xshare:auto 在可能的情况下使用共享类数据 (默认)
-Xshare:on 要求使用共享类数据, 否则将失败。
-XshowSettings 显示所有设置并继续
-XshowSettings:all
显示所有设置并继续
-XshowSettings:vm 显示所有与 vm 相关的设置并继续
-XshowSettings:properties
显示所有属性设置并继续
-XshowSettings:locale
显示所有与区域设置相关的设置并继续
-X 选项是非标准选项, 如有更改, 恕不另行通知
【3】JVM的JIT编译模式相关的选项
-
-Xint
- 只使用解释器:所有字节码都被解释执行,这个模式的速度是很慢的
-
-Xcomp
- 只使用编译器:所有字节码第一次使用就被编译成本地代码,然后在执行
-
-Xmixed
- 混合模式:这是默认模式,刚开始的时候使用解释器慢慢解释执行,后来让JIT即时编译器根据程序运行的情况,有选择地将某些热点代码提前编译并缓存在本地,在执行的时候效率就非常高了
-
查看本机使用的JIT模式
- mixed mode:所以本机使用的是混合模式
C:\Users\AlphonseKino>java -version java version "1.8.0_151" Java(TM) SE Runtime Environment (build 1.8.0_151-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
【4】注意事项
-
-Xmx -Xms -Xss属于什么参数?单位:k/K、m/M、g/G
-
-Xms :设置初始Java堆大小,等价于-XX:InitialHeapSize
- 查看该参数值的时候,应该使用InitialHeapSize
- 例:jinfo flag InitialHeapSize 进程id
-
-Xmx :设置最大Java堆大小,等价于-XX:MaxHeapSize
- 查看该参数值的时候,应该使用MaxHeapSize
- 例:jinfo flag InitialHeapSize 进程id
-
-Xss : 设置Java线程堆栈大小,等价于-XX:ThreadStackSize
- 查看该参数值的时候,应该使用ThreadStackSize
- 例:jinfo flag InitialHeapSize 进程id
-
-
注意:设置:-Xmx、-Xms最好设置成一样的值,避免扩容带来的损耗
3、类型3:-XX参数选项
【1】特点与作用
- 特点:
- 非标准化参数
- 使用的最多的参数类型
- 这类选项属于实验性,不稳定
- 以-XX开头
- 作用:用于开发和调试JVM
【2】分类
- Boolean类型格式
- -XX:+:表示启用option属性
- -XX:-:表示禁用option属性
- 说明:因为有的指令默认是开启的,所以可以使用-关闭
- 例如:
- -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转存文件的存储路径
- 子类型1:数值型格式:-XX:=