1、标准参数选项
比较稳定,后续版本基本不会变化
2、-X参数选项
java -X
- -Xmixed 混合模式执行 (默认)
- -Xint 仅解释模式执行
- -Xms<size> 设置初始Java堆大小,等价于-XX:InitialHeapSize
- -Xmx<size> 设置最大Java堆大小,等价于-XX:MaxHeapSize
- -Xss<size> 设置Java线程堆栈大小,等价于-XX:ThreadStackSize
3、-XX参数选项
3.1、分类(Boolean类型格式)
- -XX:+ 表示启用option属性
- -XX:- 表示禁用optioan属性
- -XX:-UseParallelGC 不选择垃圾收集器为并行收集器
- -XX:+UseG1GC 表示启用G1收集器
- -XX:+UseAdaptiveSizePolicy 自动选择年轻代区大小和相应的Survivor区比例
3.2、非Boolean类型格式
- -XX: 数值型格式
- -XX:
= 非数值型格式
- -XX:NewSize=1024m 表示设置新生代初始大小为1024兆
- -XX:MaxGCPauseMillis=500 表示设置GC停顿时间:500毫秒
- -XX:GCTimeRatio=19 表示设置吞吐量
- -XX:NewRatio=2 表示新生代和老年代的比例
-XX:HeapDumpPath=/usr/local/heapdump.hprof 知道heap转存文件的存储路径
3.3、特别的
- -XX:+PrintFlagFinal
- 输出所有参数的名称和默认值
- 默认不包括Diagnostic和Experimental的参数
- 可以配合-XX:+UnlockDiagnosticVMOptions和-XX:UnlockExperimentalVMOptions使用
4、添加参数
4.1、在运行时添加
使用jinfo -flag <name>=<value> <pid>设置非Boolean类型参数
使用jinfo -flag [+|-]<name> <pid>设置Boolean类型参数
jinfo -flag UseParallelGC PID
4.2、在idea添加
5、常用JVM参数选项
5.1、打印设置的XX选项及值
-XX:+PrintFlagsFinal //表示打印出XX选项在运行程序时生效的值
5.2、堆、栈、方法区等内存大小设置
5.2.1、栈
-Xss128k 等价于-XX:ThreadStackSize,设置每个线程的栈大小为128k
5.2.2、堆内存
- -Xms3550m 等价于-XX:InitialHeapSize,设置JVM初始堆内存为3500M
- -Xmx3550m 等价于-XX:MaxHeapSize,设置JVM最大堆内存为3500M
- -Xmn2g 设置年轻代大小为2G,即等价于-XX:NewSize=2g -XX:MaxNewSize=2g,也就是设置年轻代初始值和年轻代最大值都是2G 官方推荐配置为整个堆大小的3/8
- -XX:NewSize=1024m 设置年轻代初始值为1024M
- -XX:MaxNewSize=1024m 设置年轻代最大值为1024M
- -XX:SurvivorRatio=8 设置年轻代中Eden区与一个Survivor区的比值,默认为8
- -XX:+UseAdaptiveSizePolicy 自动选择各区大小比例,默认开启
- -XX:NewRatio=2 设置老年代与年轻代(包括1个Eden区和2个Survivor区)的比值,默认为2
- -XX:PretenureSizeThreadshold=1024 设置让大于此阈值的对象直接分配在老年代,单位为字节
- 只对Serial、ParNew收集器有效
- -XX:MaxTenuringThreshold=15 默认值为15 新生代每次MinorGC后,还存活的对象年龄+1,当对象的年龄大于设置的这个值时就进入老年代
- -XX:+PrintTenuringDistribution 让JVM在每次MinorGC后打印出当前使用的Survivor中对象的年龄分布
- -XX:TargetSurvivorRatio 表示MinorGC结束后Survivor区域中占用空间的期望比例
-XX:+UseAdaptiveSizePolicy //自动选择各区大小比例,默认开启,会影响设置(建议打开)
5.2.3、方法区
5.2.4、直接内存
-XX:MaxDirectMemorySize
5.3、OutOfMemory相关的选项
- -XX:+HeapDumpOnOutMemoryError
-
- 表示在内存出现OOM的时候,生成Heap转储文件,以便后续分析,-XX:+HeapDumpBeforeFullGC和-XX:+HeapDumpOnOutMemoryError只能设置1个
- -XX:+HeapDumpBeforeFullGC
- 表示在出现FullGC之前,生成Heap转储文件,以便后续分析,-XX:+HeapDumpBeforeFullGC和-XX:+HeapDumpOnOutMemoryError只能设置1个,请注意FullGC可能出现多次,那么dump文件也会生成多个
-XX:HeapDumpPath= 指定heap转存文件的存储路径,如果不指定,就会将dump文件放在当前目录中
-XX:OnOutOfMemoryError 指定一个可行性程序或者脚本的路径,当发生OOM的时候,去执行这个脚本
5.4、垃圾收集器相关选项
5.4.1、查看默认的垃圾回收器
- -XX:+PrintCommandLineFlags:查看命令相关参数
- jinfo -flag 相关垃圾回收器参数 进程ID
5.4.2、Serial回收器(串行)
作为HotSpot中Client 模式下的默认新生代垃圾收集器,Serial Old是运行在Client模式下默认的老年代的垃圾回收器
5.4.3、Parnew回收器(并行)
年轻代使用的并行收集器,不影响老年代
5.4.4、Parallel回收器(并行 jDK默认垃圾收集器,主打吞吐量)
5.4.5、CMS回收器(并发,垃圾回收线程,和用户线程,JDk1.5开启)
5.4.6、G1回收器
5.4.7、怎么选择垃圾收集器
5.5、GC日志相关选项
常用参数:
- -verbose:gc 输出日志信息,默认输出的标准输出,可以独立使用
- -XX:+PrintGC 等同于-verbose:gc 表示打开简化的日志 可以独立使用
- -XX:+PrintGCDetails 在发生垃圾回收时打印内存回收详细的日志, 并在进程退出时输出当前内存各区域的分配情况 可以独立使用
- -XX:+PrintGCTimeStamps 程序启动到GC发生的时间秒数 不可以独立使用,需要配-XX:+PrintGCDetails使用
-
- -XX:+PrintGCDateStamps 输出GC发生时的时间戳(以日期的形式,例如:2013-05-04T21:53:59.234+0800)不可以独立使用,可以配合-XX:+PrintGCDetails使用
- -XX:+PrintHeapAtGC 每一次GC前和GC后,都打印堆信息,可以独立使用
- -XIoggc:<file> 把GC日志写入到一个文件中去,而不是打印到标准输出中
5.6、其他