参见周志明的深入理解Java虚拟机第四章及jvm源码
所有命令都有很多相应参数可以做不同的用途,只说最常用的
1.jstat(源码见https://github.com/unofficial-openjdk/openjdk/blob/jdk/jdk/src/jdk.jcmd/share/classes/sun/tools/jstat/Jstat.java)
可以查看各个分代的内存使用比例,GC次数耗时等
2.jmap(源码见https://github.com/unofficial-openjdk/openjdk/blob/jdk/jdk/src/jdk.jcmd/share/classes/sun/tools/jmap/JMap.java)
生成内存快照,可以查看占用内存较多的对象,个数,占用空间等
3.jstack(https://github.com/unofficial-openjdk/openjdk/blob/jdk/jdk/src/jdk.jcmd/share/classes/sun/tools/jstack/JStack.java)
查看当前的线程快照,线程出现block的时候,查看后台到底是hung在哪里
4.jinfo(https://github.com/unofficial-openjdk/openjdk/blob/jdk/jdk/src/jdk.jcmd/share/classes/sun/tools/jinfo/JInfo.java)
jvm的配置参数
当发生OOM或者,频繁full gc,其实就需要上述命令,结合GC LOG,定位原因,解决问题,后续会研究下jvm源码