JVM运行时参数--下篇

JVM参数选项类型

标准参数选项

特点

  • 比较稳定,后续版本基本不会变化
  • 以 - 开头

各种选项

运行java或者java -help可以看到所有的标准选项
在这里插入图片描述

补充内容

  • -server与-client
    在这里插入图片描述

-X参数选项

特点

  • 非标准化参数
  • 功能还是比较稳定的,但是官方说后续版本可能会变更(可能性比较小)
  • 以 -X 开头

各种选项

运行java -X 命令可以看到所有的X选项
在这里插入图片描述

JVM的JIT编译模式相关的选项

  • Xint
    禁用JIT,所有字节码都被解释执行,这个模式的速度是最慢的。
  • Xcomp
    所有字节码第一次使用就被编译成本地代码,然后在执行。
  • Xmixed
    混合模式,默认模式,让JIT根据程序运行的情况,有选择的将某些代码编译成本地代码。

特别的

  • -Xms
    设置初始java堆大小,等价与-XX:InitialHeapSize
  • -Xmx
    设置最大Java堆大小,等价于-XX:MaxHeapSize
  • -Xss
    设置java线程堆栈大小,等价于-XX:ThreadStackSize

-XX参数选项

特点

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

作用

用于开发和调试JVM

分类

  1. Boolean类型格式
  • -XX:+表示启用option属性
  • -XX:-表示禁用option属性
  • 举例
    在这里插入图片描述
  • 说明:因为有的指令默认是开启的,所有可以使用 - 关闭。
  1. 非Boolean类型格式(key-value类型)
  • 类型1:数值型格式:-XX:=
    在这里插入图片描述
  • 类型2:非数值型格式:-XX:=
    在这里插入图片描述

特别的

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

添加JVM参数选项

Eclipse

IDEA

编辑edit configuration参数即可。

运行jar包

java xxx -jar demo.jar
在这里插入图片描述

通过Tomcat运行war包

在这里插入图片描述

程序运行过程中

在这里插入图片描述
在这里插入图片描述

常用的JVM参数选项

打印设置的XX选项及值

  1. -XX:+PrintCommandLineFlags
    可以让在程序运行前打印出用户手动设置或者JVM自动设置的XX选项。
  2. -XX:+PrintFlagsInitial
    表示打印出所有XX选项的默认值。
  3. -XX:+PrintFlagsFinal
    表示打印出XX选项在运行程序时生效的值
  4. -XX:+PrintVMOptions
    打印JVM的参数

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

-Xss128k
设置每个线程的栈大小为128k,等价于-XX:ThreadStackSize=128k

堆内存

  1. -Xms3550m
    等价于-XX:initialHeapSize,设置JVM初始值堆内存为3550M
  2. -Xmx3550m
    等价于-XX:MaxHeapSize,设置JVM最大堆内存为3550M
  3. -Xmn2g
    • 设置年轻代大小为2G
    • 官方推荐配置为整个堆大小的3/8
  4. -XX:NewSize=1024m
    设置年轻代初始值为1024M
  5. -XX:MaxNewSize=1024m
    设置年轻代最大值为1024M
  6. -XX:SurvivorRatio=8
    设置年轻代中Eden区与一个Survivor区的比值,默认为8
  7. -XX:+UseAdaptiveSizePolicy
    自动选择各区大小比例
  8. -XX:NewRation=4
    设置老年代与年轻代(包括1个Eden和2个Survivor区)的比值
  9. -XX:PretenureSizeThreadshold=1024
    设置让大于此阈值的对象之间分配在老年代,单位为字节。
    只对Serial、ParNew收集器有效
  10. -XX:MaxTenuringThreadshold=15
    默认值15
    新生代每次MinorGC后,还存活的对象年龄+1,当对象的年龄大于设置的这个值时就进入老年代。
  11. -XX:+PrintTenuringDistribution
    让JVM在每次MinorGC后打印出当前使用的Survivor中对象的年龄分布。
  12. -XX:TargetSurvivorRatio
    表示MinorGC结束后Survivor区域中占有空间的期望比例

方法区

永久代

  • -XX:PermSize=256m
    设置永久代初始值为256M,jdk8已经废弃改成元空间。
  • -XX:MaxPermSize=256m
    设置永久代最大值为256M

元空间

  • -XX:MetaspaceSize
    初始空间大小
  • -XX:MaxMetaspaceSize
    最大空间,默认没有限制
  • -XX:+UseCompressedOops
    压缩对象指针
  • -XX:+UseCompressdClassPointers
    压缩类指针
  • -XX:CompressdClassSpaceSize
    设置class Metaspace的大小,默认1G

直接内存

-XX:MaxDirectMemorySize
指定DirectMemory容量,若未指定,则默认与Java堆最大值一样

OutOfMemory相关的选项

  • -XX:+HeapDumpOnOutOfMemoryError
    表示在内存出现OOM的时候,把Heap转存(Dump)到文件以便后续分析
  • -XX:+HeapDumpBeforeFullGC
    表示在出现FullGC之前,生成Heap转储文件
  • XX:HeapDumpPath=
    指定heap转存文件的存储路径
  • -XX:OnOutOfMemoryError
    指定一个可行性程序或者脚本的路径,当发生OOM的时候,去执行这个脚本
    在这里插入图片描述

垃圾收集相关选项

垃圾回收器查看

在这里插入图片描述

Serial回收器

ParNew回收器

Parallel回收器

CMS回收器

G1回收器

怎么选择垃圾回收器

在这里插入图片描述

GC日志相关选项

常用参数

  1. -verbose:gc
    输出gc日志信息,默认输出到标准输出。
  2. -XX:+PrintGC
    等同于-verbose:gc,表示打开简化的GC日志。
  3. -XX:+PrintGCDetails
    在发生垃圾回收时打印内存回收详细的日志,并在进程退出时输出当前内存各区域分配情况。
  4. -XX:+PrintGCTimeStamps
    输出GC发生时的时间戳
  5. -XX:+PrintGCDateStamps
    输出GC发生时的时间戳(以日期的形式,如2013-05-04T21:53:59:234+0800)
  6. -XX:+PrintHeapAtGC
    每一次GC前和GC后,都打印堆信息
  7. -Xloggc:
    把GC日志写入到一个文件中去,而不是打印到标准输出中

其他参数

在这里插入图片描述

其他参数

在这里插入图片描述

通过Java代码获取JVM参数

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/tianzhonghaoqing/article/details/113872472