1. 参数类型
- 标准参数(-):所有的JVM都必须实现的参数,而且向后兼容
- 非标准参数(-X):默认JVM实现的参数,但并不保证所有JVM都满足,且不向后兼容
- 非stable参数(-XX):各个JVM实现不同,将来可能随时取消,但是这些参数往往是非常有用的
2. 标准参数
标准参数就是运行在java命令后面加的参数,如-version,-jar等,输入java -help
或java -?
就能获取所有的标准参数列表
-client
: 这是在一般pc机器上使用的模式,启动快,但是性能和内容管理效率不高,多用于桌面应用-server
: 比client模式慢10%左右,但是性能和内容管理效率高,适用于服务器,所用于服务端,64位的JVM只有server模式
启动模式 | 新生代GC方式 | 旧生代和持久代GC方式 |
---|---|---|
client | 串行 | 串行 |
server | 并行 | 并发 |
-classpath / -cp
: JVM加载和搜索文件的目录路径,多个路径用;
分割-verbose:class
: 输出jvm载入类的相关信息, 当jvm报告找不到类或者类冲突时可进行诊断-verbose:gc
: 输出每次gc的相关情况-verbose:jni
: 输出native方法调用的相关情况,一般用于诊断jni调用错误信息
3. 非标准参数
输入java -X
命令,可以获取当前JVM支持的所有非标准参数列表
-Xmn
: 新生代内存大小,包括S分区和E分区的总和-Xms
: 初始堆的大小-Xmx
: 堆大小的最大值, 默认是总物理内存/64,如果都不设置,则最大堆和最小堆会相同-Xss
: 设置现成的栈内存默认1M-Xprof
: 跟踪增运行的程序,并将跟踪数据进行标准输出,适用于开发环境调试-Xnoclassgc
: 关闭针对class的gc,由于其阻止内存回收,可能会导致OutOfMemoryError错误-Xincgc
: 开启增量gc,有助于减少长时间gc时程序出现的停顿,但会降低cpu对应的处理能力-Xloggc:file
: 与-verbose:gc
功能类似,只是将每次的gc事件记录到一个文件中
4. 非stable参数
以-XX
表示的非stable参数,大致可能分为三大类
- 性能参数: 用于jvm的性能调优和内存分配控制
- 行为参数:用于改变jvm的基础行为,如gc方式和算的选择
- 调试参数:用于监控打印输出jvm参数
非stable参数的使用方法有4种
-XX:+<option>
: 启用选项-XX:-<option>
: 不启用选项-XX:<option>=<number>
: 给选项设置一个数字型值,可加单位,如1m-XX:<option>=<string>
: 给选项设置一个字符串型值
4.1 性能参数
多用于定义内存分配的大小和比例
参数及其默认值 | 描述 |
---|---|
-XX:NewSize=2.125m | 新生代对象生成时占用内存的默认值 |
-XX:MaxNewSize=size | 新生成对象能占用内存的最大值 |
-XX:MaxPermSize=64m | 方法区所能占用的最大内存(非堆内存) |
-XX:PermSize=64m | 方法区分配的初始内存 |
-XX:MaxTenuringThreshold=15 | 对象在新生代存活区切换的次数(坚持过MinorGC的次数,每坚持过一次,该值就增加1),大于该值会进入老年代(年龄阈值) |
-XX:MaxHeapFreeRatio=70 | GC后java堆中空闲量占的最大比例,大于该值,则堆内存会减少 |
-XX:MinHeapFreeRatio=40 | GC后java堆中空闲量占的最小比例,小于该值,则堆内存会增加 |
-XX:NewRatio=2 | 新生代内存容量与老生代内存容量的比例 |
-XX:ReservedCodeCacheSize= 32m | 保留代码占用的内存容量 |
-XX:ThreadStackSize=512 | 设置线程栈大小,若为0则使用系统默认值 |
-XX:LargePageSizeInBytes=4m | 设置用于Java堆的大页面尺寸 |
-XX:PretenureSizeThreshold= size | 大于该值的对象直接晋升入老年代(这种对象少用为好) |
-XX:SurvivorRatio=8 | Eden区域Survivor区的容量比值,如默认值为8,代表Eden:Survivor1:Survivor2=8:1:1 |
4.2 行为参数
主要用于垃圾收集器类型选择,以及运行中的gc策略
参数及其默认值 | 描述 |
---|---|
-XX:+UseSerialGC | 启用串行GC,即采用Serial+Serial Old模式 |
-XX:+UseParallelGC | 启用并行GC,即采用Parallel Scavenge+Serial Old收集器组合(-Server模式下的默认组合) |
-XX:GCTimeRatio=99 | 设置用户执行时间占总时间的比例(默认值99,即1%的时间用于GC) |
-XX:MaxGCPauseMillis=time | 设置GC的最大停顿时间(这个参数只对Parallel Scavenge有效) |
-XX:+UseParNewGC | 使用ParNew+Serial Old收集器组合 |
-XX:ParallelGCThreads | 设置执行内存回收的线程数,在+UseParNewGC的情况下使用 |
-XX:+UseParallelOldGC | 使用Parallel Scavenge +Parallel Old组合收集器 |
-XX:+UseConcMarkSweepGC | 使用ParNew+CMS+Serial Old组合并发收集,优先使用ParNew+CMS,当用户线程内存不足时,采用备用方案Serial Old收集 |
-XX:-DisableExplicitGC | 禁止调用System.gc();但jvm的gc仍然有效 |
-XX:+ScavengeBeforeFullGC | 新生代GC优先于Full GC执行 |
4.3 调试参数
用于监控和打印gc信息,一般为开发或调优时使用
参数及其默认值 | 描述 |
---|---|
-XX:-CITime | 打印消耗在JIT编译的时间 |
-XX:ErrorFile=./hs_err_pid.log | 保存错误日志或者数据到文件中 |
-XX:-ExtendedDTraceProbes | 开启solaris特有的dtrace探针 |
-XX:HeapDumpPath=./java_pid.hprof | 指定导出堆信息时的路径或文件名 |
-XX:-HeapDumpOnOutOfMemoryError | 当首次遭遇OOM时导出此时堆中相关信息 |
-XX:OnError=“;” | 出现致命ERROR之后运行自定义命令 |
-XX:OnOutOfMemoryError=“;” | 当首次遭遇OOM时执行自定义命令 |
-XX:-PrintClassHistogram | 遇到Ctrl-Break后打印类实例的柱状信息,与jmap -histo功能相同 |
-XX:-PrintConcurrentLocks | 遇到Ctrl-Break后打印并发锁的相关信息,与jstack -l功能相同 |
-XX:-PrintCommandLineFlags | 打印在命令行中出现过的标记 |
-XX:-PrintCompilation | 当一个方法被编译时打印相关信息 |
-XX:-PrintGC | 每次GC时打印相关信息 |
-XX:-PrintGC Details | 每次GC时打印详细信息 |
-XX:-PrintGCTimeStamps | 打印每次GC的时间戳 |
-XX:-TraceClassLoading | 跟踪类的加载信息 |
-XX:-TraceClassLoadingPreorder | 跟踪被引用到的所有类的加载信息 |
-XX:-TraceClassResolution | 跟踪常量池 |
-XX:-TraceClassUnloading | 跟踪类的卸载信息 |
-XX:-TraceLoaderConstraints | 跟踪类加载器约束的相关信息 |