JVM运行时参数详解

Posted ProChick

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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运行时参数详解的主要内容,如果未能解决你的问题,请参考以下文章

JVM运行时参数详解

JVM运行时参数详解

JVM堆详解

JVM参数调优

JVM学习--JVM运行时数据区图文详解

Java虚拟机详解------JVM参数