查看当前垃圾回收器

命令:java -XX:+PrintCommandLineFlags -version

动态设置JVM参数

命令:jinfo -flag +HeapDumpAfterFullGC pid

查看gc的回收情况

:::info jstat -gc :::

触发fullGC,查看老年代对象大小

使用jmap工具可触发FullGC :::info jmap -dump:live,format=b,file=heap.bin 将当前的存活对象dump到文件,此时会触发FullGC
jmap -histo:live 打印每个class的实例数目,内存占用,类全名信息.live子参数加上后,只统计活的对象数量. 此时会触发FullGC
jmap -heap :::

查看进行的堆内存

:::info jmap -head PID :::

JVM的参数类型

1)标配参数(以-开头)

2)X参数(以-X开头)

“-X”开头的参数是非标准参数,也就是只能被部分VM识别,而不能被全部VM识别的参数。 :::warning 官网解释:Options that begin with -X are non-standard (not guaranteed to be supported on all VM implementations), and are subject to change without notice in subsequent releases of the JDK :::

3)XX参数(以-XX开头)

“-XX”开头的参数是非稳定参数,随时可能被修改或者移除。 :::warning 官网解释:Options that are specified with -XX are not stable and are subject to change without notice. :::

  • Boolean类型XX参数 公式:-XX:+ 或者-XX:- 某个属性值(+表示开启,-表示关闭)
  • KV设值类型 公式:-XX: key(属性)= value(属性值)

    JVM参数的写法

  • -开头的,比如-verbose:gc

  • -X开头的,比如-Xmx100M
  • -XX:开头的,比如-XX:+UseG1GC

其中-X-开头的通常会被转换成一个或者多个-XX:开头的参数,只是一个简化的写法。比如-Xmx100M,JVM里会自动转换为-XX:MaxHeapSize=100M
-verbose:class会转换为-XX:+TraceClassLoading -XX:+TraceClassUnloading

-XX 对于系统级别的(jvm)配置,例如配置日志信息,或者说jvm使用什么样的垃圾回收器
非-XX 基本上都是对应用层面上的配置

JVM常用命令

  • jps
    • java版的ps命令
    • 查看java进程及其相关的信息
    • jps [options] [hostid]
      • -m : 输出JVM启动时传递给main()的参数
      • -v : 输出JVM启动时显示指定的JVM参数
      • -q : 只输出LVMID(LVMID是进程id)
      • -l : 输出主类全名或jar路径
  • jstat
    • 用来查看JVM运行时的状态信息,包括内存状态、垃圾回收等
    • jstat [option] LVMID [interval] [count]
      • 其中LVMID是进程id,interval是打印间隔时间(毫秒),count是打印次数(默认一直打印)
  • jstack
    • jstack是用来查看JVM线程快照的命令,线程快照是当前JVM线程正在执行的方法堆栈集合。使用jstack命令可以定位线程出现长时间卡顿的原因,例如死锁,死循环等。jstack还可以查看程序崩溃时生成的core文件中的stack信息。
    • jstack [-l] (连接运行中的进程)
    • jstack -F [-m] [-l] (连接挂起的进程)
      • -F 当使用jstack 无响应时,强制输出线程堆栈。
    • jstack [-m] [-l] (连接core文件)
      • -m 同时输出java和本地堆栈(混合模式)
      • -l 额外显示锁信息
    • jstack [-m] [-l] [server_id@] (连接远程debug服务器)
  • jmap
    • jmap是用来生成堆dump文件和查看堆相关的各类信息的命
    • jmap [option] (连接正在执行的进程)
    • jmap [option] (连接一个core文件)
    • jmap [option] [server_id@] (链接远程服务器)
    • -F 强制选项