jvm-参数
参数项类型
标准参数
特点:
- 比较稳定,后续版本基本不好发生变化
- 以
-
开头
选项:运行java或java -help可以看到所有的标准选项
-X参数
特点:
- 非标准化参数
- 功能还是比较稳定的,但官方说后续版本可能会变更
- 以
-X
开头
选项:运行java -X命令可以看到所有的选项
-XX参数
特点:
- 非标准化参数
- 使用的最多的参数类型
- 这类选项属于实验性质,不稳定
- 以
-XX:
开头
作用:用于开发和调试jvm
格式:
- Boolean类型:-XX:[+|-]<option>,开启或禁用option属性
- key-value类型:-XX:<key>=<value>
可以通过
-XX:+PrintFlagsFinal
输出所有参数的名称和默认值
常用参数
打印设置的XX选项及值
- -XX:+PrintCommandLineFlags:可以让程序运行前打印出用户手动设置或者jvm自动设置的XX选项
- -XX:PrintFlagsInitial:打印出所有XX选项的默认值
- -XX:PrintFlagsFinal:打印出XX选项在运行程序时生效的值
- -XX:PrintVMOptions:打印jvm的参数
堆、栈、方法区等内存大小设置
栈
- -Xss:设置每个线程的栈大小,-XX:ThreadStackSize
堆
- -Xms:设置jvm初始内存,等价于-XX:InitialHeapSize
- -Xmx:设置jvm最大内存,-XX:MaxHeapSize
- -Xmn:设置年轻代大小(官方推荐为:整个堆的3/8)
- -XX:NewSize:年轻代初始值
- -XX:MaxNewSize:年轻代最大值
- -XX:SurvivorRation:设置年轻代中eden区和survivor区的比值,默认8
- -XX:+UseAdaptiveSizePolicy:自动设置各个区大小比例,默认开启
- -XX:NewRatio:设置老年代与年轻代的比值,默认2
- -XX:PretenureSizeThreadshold:设置让大于此阈值的对象直接分配在老年代,单位字节。只对Serial、ParNew收集器有效
- -XX:MaxTenuringThreshold:新生代每次minorGC后,存活对象年龄+1,当年龄超过这个值时,直接进入老年代,默认15
- -XX:PrintTenuringDistribution:让jvm在每次minorGC后打印出当前使用的surivor中的对象年龄分布
- -XX:TargetSurvivorRatio:表示minorGC结束后,survivor区域占用空间的期望比例
永久代
- -XX:PermSize:设置永久代初始值
- -XX:MaxPermSize:设置永久代最大值
元空间
- -XX:MetaspaceSize:设置元空间初始大小
- -XX:MaxMetaspaceSize:设置元空间最大空间,默认没有限制
- -XX:+UseCompressedOops:使用压缩对象指针
- -XX:+UseCompressedClassPointers:使用压缩类指针
- -XX:CompressedClassSpaceSize:设置klass metaspace的大小,默认1g
直接内存
- -XX:MaxDirectMemorySize:指定DirectMemory容量,如果没有指定,默认与java堆最大值一样
OOM相关
- -XX:+HeapDumpOnOutOfMemoryError:在内存出现oom的时候,把heap转储为dump文件
- -XX+HeapDumpBeforeFullGC:在出现fullGC之前,生成堆dump文件
- -XX:HeapDumpPath:指定堆dump文件的存储路径
- -XX:OnOutOfMemoryError:指定一个可行性程序或脚本的路径,当发生oom的时候,去执行这个脚本
垃圾收集器相关
Serial
- -XX:+UseSerialGC:年轻代使用serial,老年代使用SerialOld
ParNew
- -XX:+UseParNewGC:指定使用ParNew收集器执行内存回收任务。它表示年轻代使用并行收集器,不影响老年代
- -XX:ParalleGCThreads:限制线程数量,默认开启和cpu数量相同的线程数
Paralle
- -XX:+UseParalleGC:指定年轻代使用parallel
- -XX:+UseParallelOldGC:指定老年代使用parallel old
以上两个参数默认开启一个,另一个也会开启。jdk8默认开启
- -XX:ParallelGCThreads:设置年轻代并行收集器的线程数
- -XX:MaxGCPauseMillis:设置垃圾收集器最大停顿时间(stw)。单位毫秒
- -XX:GCTimeRatio:垃圾收集时间占总时间的比例。用于衡量吞吐量的大小。默认99,表示垃圾收集时间不超过1%
- -XX:+UseAdaptiveSizePolicy:自适应条件策略
CMS
- -XX:+UseConcMarkSweepGC:指定老年代使用cms,并年轻代使用ParNew
- -XX:CMSInitiatingOccupanyFraction:设置堆内存使用率的阈值,一旦到达阈值开始进行垃圾回收
- -XX:+UseCMSCompactAtFullCollection:用于指定在执行完full gc后对内存空间进行压缩整理,以避免产生内存碎片。不过因为压缩整理无法并发执行,所以停顿时间会更长
- -XX:CMSFullGCsBeforeCompaction:设置在执行多次fullGC后对内存空间进行压缩整理
- -XX:ParalleCMSThreads:设置cms的线程数量
G1
- -XX:+UseG1GC:使用g1收集器
- -XX:G1HeapRegionSize:设置每个region的大小,值是2的幂,范围1mb到32mb之间。默认是堆内存的1/2000
- -XX:MaxGCPauseMillis:设置期望达到的gc停顿时间指标(不保证达到),默认100ms
- -XX:ParallelGCthreads:设置stw时gc线程数。最多为8
- -XX:ConcGCthreads:设置并发标记的线程数
- -XX:InitiatingHeapOccupancyPercent:设置触发并发gc周期的java堆占用率阈值。超过此值,就触发gc。默认45
- -XX:G1NewSizePercent:新生代占用整个堆内存的最小百分比,默认5%
- -XX:G1MaxNewSizePercent:新生代占用整个堆内存的最大百分比,默认60%
- -XX:G1ReservePercent:保留内存区域,防止幸存者to区溢出
GC日志相关
- -verbose:gc:输出gc日志信息,默认输出到标准输出
- -XX:+PrintGC:等同于-verbose:gc,表示打开简化的gc日志
- -XX:+PrintGCDetails:在发生垃圾回收时打印内存回收详细的日志,并在进程退出时输出当前内存各区域分配情况
- -XX:+PrintGCTimeStamps:输出gc发生的时间戳
- -XX:+PrintGCDateStamps:输出gc发生的时间戳(日期的形式)
- -XX:+PrintHeapAtGC:每一次GC前和后,都打印堆信息
- -Xloggc:<file>:把gc日志写入到一个文件中去,而不是打印到标准输出
其他
- -XX:+DisableExplicitGC:禁止hotspot执行System.gc(),默认禁用
- -XX:+ReservedCodeCacheSize:指定代码缓存的大小
- -XX:+UseCodeCacheFlushing:使用该参数让jvm放弃一些被编译的代码,避免代码缓存被占满时jvm切换到interpreted-only的情况
- -XX:+DoEscapeAnalysis:开启逃逸分析
- -XX:+UseLargePages:开启使用大页面
- -XX:+UseTLAB:使用tlab,默认打开
- -XX:+PrintTLAB:打印tlab使用情况
- -XX:+TLABSize:设置tlab大小