在Java虚拟机的参数中,有3种表示方法:
(1)标准参数(-),所有JVM实现都必须实现这些参数的功能,而且向后兼容;
(2)非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
(3)非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用(但是,这些参数往往是有用的)。
1.标准参数
就是在运行java命令时后面加上的参数,如java -version,java -jar等,输入java -help或java -?就能获得当前机器所有java的标准参数列表。
-client:设置jvm使用client模式,这是一般在pc机器上使用的模式,启动很快,但性能和内存管理效率并不高,多用于桌面引用;
-server:使用server模式,启动速度虽然慢(比client模式慢10%左右),但是性能和内存管理效率很高,适用于服务器,用于生成环境、开发环境或测试环境的服务端;
64位的JVM只有server模式,所有无法使用-client参数;
-classpath/ -cp:JVM加载和搜索文件的目录路径,多个路径用;分隔。
-DpropertyName=value:定义系统的全局属性值,如配置文件地址等。
-verbose:这是查询GC问题最常用的命令之一,具体参数如:
-verbose:class:输出jvm载入类的相关信息,当jvm报告说找不到类或者类冲突时用此进行诊断。
-verbose:gc:输出每次GC的相关情况
-verbose:jni:输出native方法调用的相关情况,一般用于诊断jni调用错误信息。
2.非标准参数
非标准参数,是在标准参数的基础上进行扩展的参数,输入”java -X“命令,能够获得当前JVM支持的所有非标准参数列表。
-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
显示所有与区域设置相关的设置并继续
3.非stable参数(非静态参数)
以 -XX表示的非Stable参数,JVM(Hotspot)中主要的参数可以大致分为3类:
性能参数(Performance Options):用于JVM的性能调优和内存分配控制,如初始化内存大小的设置;
行为参数(Behavioral Options):用于改变JVM的基础行为,如GC的方式和算法的选择;
调试参数(Debugging Options):用于监控、打印、输出等jvm参数,用于显示jvm更加详细的信息;
对于非Stable参数,使用方法有4种:
-XX:+<option> 启用选项
-XX:-<option> 不启用选项
-XX:-<option>=<numbner> 给选项设置一个数字类型值,可跟单位,例如32K,1924m,2g
-XX:-<option>=<string> 给选项设置一个字符串值,例如-XX:HeapDumpPath=./dump.core