0
点赞
收藏
分享

微信扫一扫

JVM运行时参数大全

kiliwalk 2022-02-13 阅读 50

JVM运行时参数

jvm参数选项类型

-X参数选项

  • 特点

     非标准化参数
     功能还是比较稳定的。官方说后序可能变更
     以-X开头
    • -Xint

     禁用JIT,所有字节码都被解释执行,这个模式的速度是最慢的
    • Xcomp

     所有字节码第一次使用就都被编译成本地代码,然后再执行
    • Xmixed

     混合模式,默认模式,让JIT根据程序运行的情况,有选择地将某些代码编译成本地代码
    • Xms<size>

     设置初始Java堆的大小,等价于-XX:InitialHeapSize
    • Xmx<size>

     设置最大Java堆大小,等价于-XX:MaxHeapSize
    • -Xss<size>

     设置Java线程堆栈大小,-XX:ThreadStackSize

-XX参数选项

  • 特点

     非标准化参数
     使用最多的参数类型
     这类选项属于实验性,不稳定
     以-XX开头
  • 作用

     用于开发和调试JVM
  • 分类

    • Boolean类型格式

       -XX:+<option>表示启用option属性
       -XX:-<option>表示禁用option属性
       说明:因为有的指令默认是开启的,所以可以使用-关闭
    • 非Boolean类型格式(key-value类型)

       子类型1:数值型格式-XX:<option>=<number>
       子类型2:非数值型格式:-XX:<option>=<string>
  • 特别地

    • -XX:+PrintFlagsFinal

       输出所有参数的名称和默认值
       默认不包括Diagnostic和Experimental的参数
       可以配合-XX:+UnlockDiagnosticVMOptions和-XX:UnlockExperimentalVMOptions使用

添加JVM参数选项

  • 运行jar包

     java -Xms50m -Xmx: 50m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps - jar demo . jar
  • 通过Tomcat运行war包

     Linux系统下可以在tomcat/bin/catalina.sh中添加类似如下配置:JAVA_OPTS="-Xms512M -Xmx1024M"
     Windows系统下在catalina.bat中添加类似如下配置:set"JAVA_OPTS=-Xms512M -Xmx1024M"
  • 程序运行过程中

     使用jinfo -flag <name>=<value> <pid>设置非Boolean类型参数
     使用jinfo -flag [+|-]<name> <pid>设置Boolean类型参数

常用的JVM参数选项

打印设置的XX选项及值

  • -XX:+PrintCommandLineFlags

     可以让在程序运行前打印出用户手动设置或者JVM自动设置的XX选项
  • -XX:+PrintFlagsInitial

     表示打印出所有XX选项的默认值
  • -XX:+PrintFlagsFinal

     表示打印出XX选项在运行程序时生效的值
  • -XX:+PrintVMOptions

     打印JVM的参数

堆、栈、方法区等内存大小设置

    • -Xss 128k

       设置每个线程的栈大小为128k
       等价于 -XX:ThreadStackSize = 128k
  • 堆内存

    • -Xms3550m

       等价于-XX:InitialHeapSize,设置JVM初始堆内存为3550m
    • -Xmx3550m

       等价于-XX:MaxHeapSize,设置JVM最大堆内存为3550m
    • -Xmn2g

       设置年轻代大小为2G
       官方推荐配置为整个堆大小的3/8
    • -XX:NewSize=1024m

       设置年轻代初始值为1024m
    • -XX:MaxNewSize=1024m

       设置年轻代最大值为1024m
    • -XX:SurvivorRatio=8

       设置年轻代中Eden区与一个Survivor区的比值,默认为8
    • -XX:+UseAdaptiveSizePolicy

       自动选择各区大小比例
    • -XX:NewRatio=4

       设置老年代与年轻代(包括1个Eden和2个Survivor区)的比值
    • -XX:PretenureSizeThreadshold=1024

       设置让大于此阈值的对象直接分配在老年代,单位为字节
       只对Serial、ParNew收集器有效
    • -XX:MaxTenuringThreshold=15

       默认值为15
       新生代每次MinorGC后,还存活的对象年龄+1,当对象的年龄大于设置的这个值时就进入老年代
    • -XX:+PrintTenuringDistribution

       让JVM在每次MinorGC后打印出当前使用的Survivor中对象的年龄分布
    • -XX:TargetSurvivorRation

       表示MinorGC结束后Survivor区域中占用空间的期望比例
  • 方法区

    • 永久代

      • -XX:PermSize=256m

         设置永久代初始值为256m
      • -XX:MaxPermSize=256m

         设置永久代最大值为256m
    • 元空间

      • XX:MetaspaceSize

         初始空间大小
      • -XX:MaxMetaspaceSize

         最大空间,默认没有限制
      • -XX:+UseCompressedOops

         压缩对象指针
      • XX:+UseCompressedClassPointers

         压缩类指针
      • -XX:CompressedClassSpaceSize

         设置Klass Metaspace的大小,默认1G
  • 直接内存

    • XX:MaxDirectMemorySize

       指定DirectMemory容量,若未指定,则与Java堆最大值一样

OutofMemory相关的选项

  • -XX:+HeapDumpOnOutOfMemoryError

     表示在内存出现OOM的时候,把Heap转存(Dump)到文件以便后续分析
  • -XX:+HeapDumpBeforeFullGC

     表示在出现FulIGC之前,生成Heap转储文件
  • -XX:HeapDumpPath=<path>

     指定heap转存文件的存储路径
  • -XX:OnOutOfMemoryError

     指定一个可行性程序或者脚本的路径,当发生OOM的时候,去执行这个脚本

GC日志相关选项

  • 常用参数

    • -verbose:gc

       输出gc日志信息,默认输出到标准输出
       可以独立使用
    • -XX:+PrintGC

       等同于-verbose:gc表示打开简化的GC日志
       可以独立使用
    • XX:+PrintGCDetails

       在发生垃圾回收时打印内存回收详细的日志,并在进程退出时输出当前内存各区域分配情况
       可以独立使用
    • XX:+PrintGCTimeStamps

       输出GC发生时的时间戳
       不可以独立使用,需要配合-XX:+PrintGCDetails使用
    • XX:+PrintGCDateStamps

       输出GC发生时的时间戳(以日期的形式,如2013-05-04T21:53:59.234+0800)
       不可以独立使用,需要配合-XX:+PrintGCDetails使用
    • -XX:+PrintHeapAtGC

       每一次GC前和GC后,都打印堆信息
       可以独立使用
    • Xloggc:<file>

       把GC日志写入到一个文件中去,而不是打印到标准输出中
  • 其他参数

    • -XX:+TraceClassLoading

       控制类的加载
    • -XX:+PrintGCApplicationStoppedTime

       打印GC时线程的停顿时间
    • -XX:+PrintGCApplicationConcurrentTime

       垃圾收集之前打印出应用未中断的执行时间
    • -XX:+PrintReferenceGC

       记录回收了多少种不同引用类型的引用
    • -XX:+PrintTenuringDistribution

       让JVM在MinorGC后打印出当前使用的Survior中对象的年龄分布
    • -XX:+UseGCLogFileRotation

       启用GC日志文件的自动转储
    • -XX:NumberOfGClogFiles=1

       GC日志文件的循环数目
    • -XX:GCLogFileSize=1M

       控制GC日志文件的大小

其他参数

  • -XX:+DisableExplicitGC

     禁止hotspot执行System.gc(),默认禁用
  • -XX:ReservedCodeCacheSize=<n>[g|m|k]、-XX:InitialCodeCacheSize=<n>[g|m|k]

     指定代码缓存的大小
  • -XX:+UseCodeCacheFlushing

     使用该参数让jvm放弃一些被编译的代码,
     避免代码缓存被占满时JVM切换到interpreted-only的情况
  • -XX:+DoEscapeAnalysis

     开启逃逸分析
  • -XX:+UseBiasedLocking

     开启偏向锁
  • -XX:+UseLargePages

     开启使用大页面
  • -XX:+UseTLAB

     使用TLAB,默认打开
  • -XX:+PrintTLAB

     打印TLAB的使用情况
  • -XX:TLABSize

     设置TLAB大小
举报

相关推荐

0 条评论