JVM参数的三种表示方法
在jvm中,jvm虚拟机参数有以下三种表示方法:
- 标准参数(-)所有的JVM实现都必须实现这些参数的功能,而且向后兼容
- 非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
- 非标准参数(-XX),此类参数各个jvm实现会有所不同(重点掌握部分)
注意:这里的参数一律使用大写的X
标准参数
标准参数就是java命令行执行加上的参数,例如 java -jar、java -version 、java -help
-client 和-server
设置jvm使用client模式,这是一般在pc机器上使用的模式,启动很快,但性能和内存管理效率并不高;多用于桌面应用;
使用server模式,启动速度虽然慢(比client模式慢10%左右),但是性能和内存管理效率很高,适用于服务器
如果没有指定-server或-client,JVM启动的时候会自动检测当前主机是否为服务器,如果是就以server模式启动
64位的JVM只有server模式,所以无法使用-client参数
默认情况下,不同的启动模式,执行GC的方式有所区别,client模式新生代和老年代都是采用串行模式,server模式启动并行模式
-verbose
这是查询GC问题最常用的命令之一,常用于排查GC问题
- -verbose:gc 输出每次GC的相关情况
- -verbose:class 输出jvm载入类的相关信息
- -verbose:jni 输出native方法调用的相关情况
非标准参数-X
-X参数,是在标准基础上扩展的参数,在命令行中输入java -X 命令将显示所有可配置的-X参数的配置项
-Xms 和 -Xmx 和 -Xmn 和 -Xss
-Xms设置初始堆内存大小,设定程序启动时占用内存大小,默认物理内存1/64
-Xms = -XX:InitialHeapSiz
-Xmx 设置最大堆内存大小 ,设定程序运行期间最大可占用的内存大小,如果程序运行需要占用更多的内存,超出了这个设置值,就会抛出OutOfMemory异常,默认物理内存1/4,
-Xmx = -XX:MaxHeapSize
-Xmn设置年轻代大小,增大年轻代会减少老年代大小,官网推荐整堆的3/8
-Xss设置单个线程栈内存,默认1M
非标准参数-XX
-XX参数分为三大类,分别为:
- 性能参数:用于JVM的性能调优和内存分配控制
- 行为参数:用于改变JVM的基础行为,如GC的方式和算法的选择
- 调试参数:用于监控、打印、输出等jvm参数
非标准参数-XX的使用方式
-XX:+<option> 启用选项
-XX:-<option> 不启用选项
-XX:<option>=<number/string> 给选项设置一个数字或者字符串,可跟单位,例如 32k, 1024m, 2g
性能参数
参数名称 | 参数描述 |
-XX:NewRatio=2 | 表示新生代和老年代比例为1:2 |
-XX:PermSize=64m | 方法区分配的初始内存 |
-XX:MaxPermSize=64m | 方法区所能占用的最大内存(非堆内存) |
-XX:SurvivorRatio=8 | 如默认值为8,代表Eden:Survivor0:Survivor1=8:1:1 |
-XX:PretenureSizeThreshold= size | 大于该值的对象直接晋升入老年代(慎用) |
-XX:MetaspaceSize=size | 元空间大小,使用本地内存,由操作系统支配 |
行为参数
参数名称 | 参数描述 |
-XX:+UseSerialGC | 启用串行GC,即采用Serial+Serial Old模式 |
-XX:+UseParallelGC | 启用并行GC,即采用Parallel Scavenge+Serial Old收集器组合(-Server模式下的默认组合) |
-XX:+UseParNewGC | 使用ParNew+Serial Old收集器组合 |
-XX:+UseG1GC | 使用G1回收器 |
调试参数
参数名称 | 参数描述 |
-XX:+PrintGCDetails | 打印GC详细信息 |
-XX:-PrintGC | 每次GC时打印相关信息 |
-XX:-PrintGCTimeStamps | 打印每次GC的时间戳 |
-XX:-TraceClassLoading | 跟踪类的加载信息 |