JVM参数类型大揭秘

JVM参数类型大揭秘

JVM的参数类型

标准参数

在各个版本的JVM中基本保持不变,相对稳定

  • -help

  • -server -client

  • -version -showversion

  • -cp -classpath

X参数

非标准参数,在各个版本的JVM中可能会变,但是变化较小

  • -Xint:解释执行
  • -Xcomp:第一次使用就编译成本地代码
  • -Xmixed:混合模式,JVM自己来决定是否编辑成本地代码

默认混合模式

设置为解释模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SwYsLJlV-1585792192843)(C:\Users\sunmingzhi\AppData\Roaming\Typora\typora-user-images\1585728229372.png)]

设成编译模式

XX参数

  • 特点:

    • 非标准化参数化
    • 相对不稳定
    • 主要用于JVM调优和Debug
  • 分类

    • Boolean

      • 格式:-XX:[+ -]表示启用或者禁用name属性。其中+号表示启用该参数,-号表示禁用该参数

      • 例子

        -XX:+UseConcMarkSweepGC 表示启用了CMS垃圾收集器

        -XX:+UseG1GC 表示启用了G1垃圾收集器

    • 非Boolean

      • 格式:-XX:=表示name属性的值是value,主要是以key,value形式存在

      • 例子:

        -XX:MaxGCPauseMillis=500 表示GC最大的停顿时间是500ms

        -XX:GCTimeRatio=19 表示GCTimeRatio等于19

  • 总结:

    Boolean是带有±号,

    Boolean类型是key,value形式存在,中间用等号。

-Xmx -Xms

一个是设置最大内存,一个是设置最小内存

  • 不是X参数,而是XX参数

    • –Xms等价于-XX:InitialHeapSize
    • -Xmx等价于-XX:MaxHeapSize
    • -Xss等价于-XX:ThreadStackSize

    InitialHeapSize初始堆的大小。MaxHeapSize最大的堆大小。ThreadStackSize线程堆栈大小

    • 查看运行后的进程,最大的堆大小值: jinfo -flag MaxHeapSize 33333
    • 查看现场的堆栈大小: jinfo -flag ThreadStackSize 33333
  • 默认情况不做修改的话,堆栈其中的一个线程就有1024k,这线程应该还是比较大的。我们在调优的时候还是会把这个值调小一些。

运行时JVM参数查看

参数:

  • -XX:+PrintFlagsInitial(查看初始值)

  • -XX:+PrinFlagsFinal(查看最终值)

=表示默认值

:=被用户或者JVM修改后

  • -XX:+UnlockExperimentalVMOptions(解锁实验参数)

  • -XX:+UnlockDiagnosticVMOptions(解锁诊断参数)

  • -XX:+PrintCommandLineFlags(打印命令行参数)

jps

  • 类似Linux系统中的pa,也就是用来查看系统进程的,不过是专门用来查看java的进程

  • 使用指南

jinfo

  • 查看一个正在运行的JVM的参数值

  • 查看tomcat的最大内存值:首先得知命令,然后找到对应的pid

jstat查看虚拟机统计信息

在垃圾回收这块十分有用,可以清楚的看到内存结构里每一块的大小是如何进行变化的

类装载

jstat -class 3176 1000 10

后面1000表示每隔1000ms,10表示一共输出10次

  • -class
    • Loaded:类装载的个数
    • Bytes:装载的kBs数
    • Unloaded:卸载的个数
    • Bytes:卸载的kBs数
    • Time:所花费的装载和卸载的时间

垃圾收集

命令:-gc 、-gcutil、-gccause、-gcnew、-gcold

  • -gc
    • S0C、S1C、S0U、S1U:S0和S1的总量与使用量
    • EC、EU:Eden区总量与使用量
    • OC、OU:Old区总量与使用量
    • MC、MU:Metaspace区总量与使用量
    • CCSC、CCSU:压缩类空间总量与使用量
    • YGC、YGCT:YoungGC的次数与时间
    • FGC、FGCT:FullGC的次数与时间
    • GCT:总的GC时间

JIT编译

命令:-compiler、-printcompilation

  • -compiler
    • Compiled:表示完成了多少个编译任务
    • Failed:表示失败的编译任务个数
    • Invalid:表示无效的编译任务
    • Time:执行编译任务所花的时间。
    • FailedType:上次失败编译的编译类型。
    • FailedMethod:上次编译失败的类名和方法。

jmap+MAT实战内存溢出

JVM内存结构

  • JVM的内存结构分为两个大块,

    • 堆区

      • Young
        • Survivor
          • S0
          • S1
        • Eden
      • Old

    • 非堆区:属于我们操作系统的本地内存,独立于我们堆区以外。在JDK8中叫Metaspace

查看线上堆内存溢出以及非堆内存溢出

发送内存溢出的主要原因
  • 内存泄漏

    • 导出内存映像文件
      • 内存溢出自动导出
        • -XX:+HeapDumpOnOutOfMemoryError
        • -XX:HeapDumpPath=./
        • 第一个参数表示:当发生内存溢出的时候,将内存溢出文件Dump出来。
        • 第二个参数表示:Dump出来的文件存放的目录。
      • 使用jmap命令手动导出
        发送内存溢出的主要原因
  • 内存泄漏

    • 导出内存映像文件
      • 内存溢出自动导出
        • -XX:+HeapDumpOnOutOfMemoryError
        • -XX:HeapDumpPath=./
        • 第一个参数表示:当发生内存溢出的时候,将内存溢出文件Dump出来。
        • 第二个参数表示:Dump出来的文件存放的目录。
      • 使用jmap命令手动导出
  • 内存分配不足

猜你喜欢

转载自blog.csdn.net/issunmingzhi/article/details/105262668