一、jstat
jstat用于查看虚拟机各种状态信息。
通常格式为jstat -option pid [interval] [count]:
option:功能选项,用于选择查看不同的状态信息;
pid:进程号;
interval:输出间隔时间;
count:执行次数;
1、jstat -class pid
图中Loaded代表类装载数,Unloaded代表类卸载数,两个Bytes分别代表装载卸载类的字节数,最后Time代表装载卸载总耗时。
2、jstat -compiler pid
compiled:编译数量; Failed:失败数量; Invalid:失效数量; Time:编译耗时;
FailedType:失败类型; FailedMethod:失败任务所在类及方法
3、jstat -gc pid
图中添加了间隔执行时间及执行次数。
S0C、S1C:两块survivor区大小;S0U、S1U:两块区域已使用大小;EC、EU:Eden区大小及已使用大小;OC、OU:老年代大小及使用大小;MC、MU:元空间大小及使用大小;CCSC、CCSU:压缩类大小及已使用大小(对象头中压缩指针指向的元空间大小,文档上的注释如图:)
YGC、YGCT:年轻代gc次数及时间;FGC、FGCT:full gc次数及时间;GCT:总gc时间
4、jstat -gccapacity pid
显示JVM内存使用情况:
NGCMN:年轻代空间最小值;NGCMX:年轻代空间最大值;NGC:年轻代当前空间大小;
S0C、S1C、EC:survivor区两块空间及Eden区的当前大小;
OGCMN、OGCMX:老年代空间最小值及最大值;OGC:老年代当前新生成空间大小;OC:老年代空间大小;MCMX、MCMX、MC:分别代表元空间最小值、最大值、当前值;
CCSMN、CCSMX、CCSC:压缩类空间最小值、最大值、当前值;YGC:年轻代gc次数;FGC:full gc次数;
5、jstat -gcutil pid
S0、S1、E、O、M、CCS:分别代表两块survivor区、Eden区、Old区、元空间、压缩类空间已使用大小占当前空间总大小的比值。YGC、YGCT:年轻代gc次数及时间;FGC、GFCT:gull gc次数及时间;GCT:总gc时间。
6、jstat -gcnew pid
这里仅TT、MTT、DSS与前文不同,所以进介绍这三个值,下文同理,不再声明。
TT:对象在新生代存活的次数;
MTT:对象在新生代存活的最大次数;
DSS:期望的幸存区大小;
7、jstat -gcnewcapacity pid
列出项含义见上文。
8、jstat -gcold pid
列出项含义见上文。
9、jstat -gcoldcapacity pid
10、jstat -gcpermcapacity pid与 jstat -gcmetacapacity pid
1.8移除了永久区,没gcpermcapacity
这个参数了,取而代之的是元空间,因此使用gcmetacapacity
11、jstat -printcompilation pid
compiled:已编译的数目;
size:最近编译的方法字节码大小;
Type:编译类型;
Method:编译的方法;
二、javap
用于class文件的反编译
1、javap xx
注:命令行在class文件所在目录打开才能反编译。或者在bin目录下打开,使用时输入全类名(即包含类名)。
2、javap -c xx
-c参数可以查看每个方法具体的字节码指令。
还有不少参数就不一一尝试了,附javap -help一张: