JVM运行时参数详解
Posted 编程小吉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM运行时参数详解相关的知识,希望对你有一定的参考价值。
JVM运行时参数
1.参数选项类型
-
以
-
开头的参数选项也叫作标准参数选项,这些参数比较稳定,基本不会随着JDK版本的改变而变化
可以使用
java -help
指令在CMD命令行查看都有哪些参数选项: -
以
-X
开头的参数选项也叫作非标准参数选项,这些参数相对也比较稳定,但是可能会随着JDK版本的改变而变化
可以使用
java -X
指令在CMD命令行查看都有哪些参数选项: -
以
-XX
开头的参数选项也叫作非标准参数选项,这些参数比较不稳定,但是使用最多,用于开发和调试JVM
# 启用某个选项(-XX:+UseG1GC) -XX:+<option> # 禁用某个选项(-XX:-UseG1GC) -XX:-<option> # 设置数值型(-XX:NewRatio=2) -XX:<option>=<number> # 设置非数值型(-XX:HeapDumpPath=/usr/local/xxx) -XX:<option>=<string>
2.常用参数选项
-
打印相关
-XX:+PrintCommandLineFlags
打印由用户设置或者JVM自动设置的参数选项-XX:+PrintFlagsInitial
打印所有参数选项的默认值-XX:+PrintFlagsFinal
打印所有参数选项的生效值-XX:+PrintVMOptions
打印JVM参数
-
堆相关
-Xms100m
设置JVM初始堆内存的大小-Xmx100m
设置JVM最大堆内存的大小-XX:InitialHeapSize=100m
设置JVM初始堆内存的大小-XX:MaxHeapSize=100m
设置JVM最大堆内存的大小-Xmn1g
设置年轻代的内存大小,推荐调整为整个堆大小的3/8-XX:NewSize=1g
设置年轻代初始的内存大小-XX:MaxNewSize=1g
设置年轻代最大的内存大小-XX:SurvivorRatio=8
设置年轻代中Eden区和Survivor区的比例-XX:NewRatio=4
设置年轻代与老年代的比例-XX:+UseAdaptiveSizePolicy
是否开启自动分配内存大小比例-XX:PretenureSizeThreadshold=1024
设置大于指定字节大小的对象直接分配在老年代-XX:MaxTenuringThreshold=15
设置在Survivor区存活对象的年龄最大值-XX:+OrintTenuringDistribution
在进行MinorGC后,打印当前Survivor区中各个对象的年龄-XX:TargetSurvivorRatio=5
设置在进行MinorGC后,Survivor区占用空间的期望大小
-
栈相关
-Xss128k
设置每个线程的栈大小-XX:ThreadStackSize=128k
设置每个线程的栈大小
-
方法区相关
-XX:PermSize=256m
设置永久代初始大小-XX:MaxPermSize=256m
设置永久代最大大小-XX:MetaspaceSize=256m
设置元空间初始大小-XX:MaxMetaspaceSize=256m
设置元空间的最大大小-XX:+UseCompressedOops
是否启用压缩对象指针-XX:+UseCompressedClassPointers
是否启用压缩类指针-XX:CompressedClassSpaceSize=1g
设置压缩元空间的大小-XX:MaxDirectMemorySize
设置直接内存的大小,默认和Java的堆空间大小一样
-
内存溢出相关
-XX:+HeapDumpOnOutOfMemoryError
当出现内存溢出时,生成一次堆存储文件-XX:+HeapDumpBeforeFullGC
在出现FullGC之前,生成一次堆转储文件-XX:HeapDumpPath
设置堆转储文件的保存路径-XX:OnOutOfMemoryError
指定一个可执行程序路径,当出现内存溢出时执行它。
-
垃圾收集器相关
-
-XX:MaxGCPauseMillis
设置垃圾收集器的最大停顿时间 -
-XX:GCTimeRatio
设置垃圾收集器收集的时间占总时间的比例 -
-XX:ParallelGCThreads=n
设置年轻代中并行垃圾收集器执行时的线程数量 -
-XX:+UseSerialGC
指定年轻代和老年代都使用Serial串行垃圾收集器 -
-XX:+UseParNewGC
指定年轻代使用ParNew并行垃圾收集器 -
-XX:+UseParallelGC
指定年轻代使用Parallel并行垃圾收集器 -
-XX:+UseParallelOldGC
指定老年代使用Parallel Old并行垃圾收集器 -
-XX:+UseConcMarkSweepGC
指定老年代使用CMS垃圾搜集器,然后年轻代启用ParNew -
-XX:CMSInitiatingOccupanyFraction
设置CMS垃圾收集器中堆内存使用率的阈值,如果超出,则进行回收 -
-XX:+UseCMSCompactAtFullCollection
设置CMS垃圾收集器当进行FullGC之后,对内存空间进行压缩整理 -
-XX:CMSFullGCsBeforeCompaction
设置CMS垃圾收集器在执行多少次FullGC后,对内存空间进行压缩整理 -
-XX:ParallelCMSThreads
设置CMS垃圾收集器收集时的线程数量 -
-XX:+UseG1GC
指定年轻代和老年代都使用G1垃圾收集器 -
-XX:G1HeapRegionSize
设置G1垃圾收集器中每个Region的大小,默认是堆内存大小的1/2000 -
-XX:ParallelGCThread
设置G1垃圾收集器在进行STW时GC线程的数量 -
-XX:ConcGCThreads
设置G1垃圾收集器并发标记的线程数 -
-XX:InitiatingHeapOccupanyPercent
设置触发G1垃圾收集器进行GC的堆空间占用率 -
-XX:G1NewSizePercent
设置G1垃圾收集器中年轻代占用整个堆内存的最小百分比 -
-XX:G1MaxNewSizePercent
设置G1垃圾收集器中年轻代占用整个堆内存的最大百分比 -
-XX:G1ReservePercent
设置G1垃圾收集器中保留的内存区域个数
-
-
垃圾收集日志相关
-verbose:gc
输出简化的GC日志信息,可以独立使用-XX:+PrintGC
输出简化的GC日志信息,可以独立使用-XX:+PrintGCDetails
输出详细的GC日志信息,可以独立使用-XX:+PrintGCTimeStamps
输出GC发生的时间,需要配合前面三种指令中的一种-XX:+PrintGCDateStamps
输出GC发生的日期,需要配合前面三种指令中的一种-XX:+PrintHeapAtGC
在每一次进行GC之前和之后,都输出GC日志信息-Xloggc:filepath
将GC日志信息输出到指定文件-XX:+TraceClassLoading
监控类的加载-XX:+PrintGCApplicationStoppedTime
输出GC时线程的停顿时间-XX:+PrintGCApplicationConcurrentTime
输出垃圾收集之前应用未中断的执行时间-XX:+PrintReferenceGC
输出回收了多少种不同引用类型的引用-XX:+PrintTenuringDistribution
输出每次MinorGC后,当前的Survivor区中对象的年龄分布-XX:+UseGCLogFileRotation
是否启用GC日志文件的自动转储-XX:NumberOfGCLogFiles=1
设置GC日志文件的循环数目-XX:GCLogFileSize=1m
设置GC日志文件的最大存储大小
-
其它
-XX:+DisabledExplicitGC
是否禁止HotSpot虚拟机执行System.gc方法-XX:ReservedCodeCacheSize=n
设置代码缓存的大小-XX:+UseCodeCacheFlushing
是否启用代码缓存刷新-XX:+DoEscapeAnalysis
是否启用逃逸分析-XX:+UseBiasedLocking
是否启用偏向锁-XX:+UseLargePages
是否启用大页面-XX:+UseTLAB
是否启用TLAB-XX:+PrintTLAB
输出TLAB的使用情况-XX:TLABSize
设置TLAB的大小
3.添加参数选项
-
在Eclipse中
-
在IDEA中
-
在命令行中
java -jar xxx.jar -Xms100m -Xmx100m
-
在Tomcat中
# 在Linux系统中,找到tomcat/bin/catalina.sh文件并添加如下内容 JAVA_OPTS="-Xms100m -Xmx100m" # 在Windows系统中,找到tomcat/bin/catalina.bat文件并添加如下内容 set "JAVA_OPTS=-Xms100m -Xmx100m"
-
在程序运行中
# 设置Boolean类型参数选项 jinfo -flag <+|-><option> <pid> # 设置非Boolean类型参数选项 jinfo -flag <option>=<value> <pid>
不过只允许修改其中某些参数选项:
以上是关于JVM运行时参数详解的主要内容,如果未能解决你的问题,请参考以下文章