查看当前垃圾回收器
命令:java -XX:+PrintCommandLineFlags -version
动态设置JVM参数
命令:jinfo -flag +HeapDumpAfterFullGC pid
查看gc的回收情况
触发fullGC,查看老年代对象大小
使用jmap工具可触发FullGC
:::info
jmap -dump:live,format=b,file=heap.bin
jmap -histo:live
jmap -heap
查看进行的堆内存
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
无响应时,强制输出线程堆栈。
- -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 强制选项