[TOC]
# 介绍
获取虚拟机内存状态信息,包括GC信息、编译类信息、元数据内存信息,封装于命令`jstat`
# 示例
~~~
import beifengtz.vmconsole.JStatCmd;
import beifengtz.vmconsole.entity.jstat.JStatResultForGc;
public class Test {
public static void main(String[] args){
JStatResultForGc jStatResultForGc = JStatCmd.gc(8888);
}
}
~~~
# 方法
| 名称 | 参数 | 返回值 | 含义 |
| --- | --- | --- | --- |
| list() | 无 | JStatResult | 获取虚拟机信息列表,仅包含名字 |
| snap() | int vmId(虚拟机ID,JpsCmd可获取) | JStatResult | 获取虚拟机信息及其值列表,包含名字和对应值|
| clazz() | int vmId(虚拟机ID,JpsCmd可获取) | JStatResultForClass |获取虚拟机加载的类信息 |
| clazz() | 1. int vmId(虚拟机ID,JpsCmd可获取)<br/>2. long interval(命令执行时间)<br/>3. int count(在该执行时间内获取的数量)| ArrayList\<JStatResultForClass \> | 批量获取虚拟机加载的类信息,在interval时间内获取count个 |
| gc() | int vmId(虚拟机ID,JpsCmd可获取) | JStatResultForGc | 获取gc数据|
| gc() | 1. int vmId(虚拟机ID,JpsCmd可获取)<br/>2. long interval(命令执行时间)<br/>3. int count(在该执行时间内获取的数量)| ArrayList\<JStatResultForGc\> | 批量获取虚拟机gc数据,在interval时间内获取count个 |
| compiler() | int vmId(虚拟机ID,JpsCmd可获取)| JStatResultForGcCapacity | 获取虚拟机编译信息 |
| compiler() | 1. int vmId(虚拟机ID,JpsCmd可获取)<br/>2. long interval(命令执行时间)<br/>3. int count(在该执行时间内获取的数量)| ArrayList\<JStatResultForGcCapacity\> | 批量获取虚拟机编译信息,在interval时间内获取count个 |
| gcCapacity() | int vmId(虚拟机ID,JpsCmd可获取) | JStatResultForGcCapacity | 获取虚拟机GC内存情况|
| gcCapacity() | 1. int vmId(虚拟机ID,JpsCmd可获取)<br/>2. long interval(命令执行时间)<br/>3. int count(在该执行时间内获取的数量) | ArrayList\<JStatResultForGcCapacity\>| 批量获取虚拟机GC内存情况,在interval时间内获取count个|
| gcNew() | int vmId(虚拟机ID,JpsCmd可获取) | JStatResultForGcNew | 获取虚拟机新生代GC情况 |
| gcNew() | 1. int vmId(虚拟机ID,JpsCmd可获取)<br/>2. long interval(命令执行时间)<br/>3. int count(在该执行时间内获取的数量) | ArrayList\<JStatResultForGcNew\> | 批量获取虚拟机新生代GC情况 |
| gcNewCapacity() | int vmId(虚拟机ID,JpsCmd可获取)| JStatResultForGcNewCapacity | 获取虚拟机新生代GC内存情况 |
| gcNewCapacity() | 1. int vmId(虚拟机ID,JpsCmd可获取)<br/>2. long interval(命令执行时间)<br/>3. int count(在该执行时间内获取的数量) | ArrayList\<JStatResultForGcNewCapacity \>| 批量获取虚拟机新生代GC内存情况 |
| gcOld() | int vmId(虚拟机ID,JpsCmd可获取)| JStatResultForGcOld | 获取虚拟机老年代GC情况 |
| gcOld() | 1. int vmId(虚拟机ID,JpsCmd可获取)<br/>2. long interval(命令执行时间)<br/>3. int count(在该执行时间内获取的数量)| ArrayList\<JStatResultForGcOld\> | 批量获取虚拟机老年代GC情况 |
| gcOldCapacity() | int vmId(虚拟机ID,JpsCmd可获取)| JStatResultForGcOldCapacity | 获取虚拟机老年代GC内存情况 |
| gcOldCapacity() | 1. int vmId(虚拟机ID,JpsCmd可获取)<br/>2. long interval(命令执行时间)<br/>3. int count(在该执行时间内获取的数量)| ArrayList\<JStatResultForGcOldCapacity\> | 批量获取虚拟机老年代GC内存情况 |
| gcMetaCapacity() | int vmId(虚拟机ID,JpsCmd可获取)| JStatResultForGcMetaCapacity | 获取元数据空间内存情况 |
| gcMetaCapacity() | 1. int vmId(虚拟机ID,JpsCmd可获取)<br/>2. long interval(命令执行时间)<br/>3. int count(在该执行时间内获取的数量)| ArrayList\<JStatResultForGcMetaCapacity \>| 批量获取元数据空间内存情况 |
| gcUtil() | int vmId(虚拟机ID,JpsCmd可获取)| JStatResultForGcUtil | 获取gc统计数据 |
| gcUtil() | 1. int vmId(虚拟机ID,JpsCmd可获取)<br/>2. long interval(命令执行时间)<br/>3. int count(在该执行时间内获取的数量)| ArrayList\<JStatResultForGcUtil \>| 批量获取gc统计数据 |
| printCompilation() | int vmId(虚拟机ID,JpsCmd可获取)| JStatResultForCompilation | 获取已经被JIT编译的方法 |
| printCompilation() | 1. int vmId(虚拟机ID,JpsCmd可获取)<br/>2. long interval(命令执行时间)<br/>3. int count(在该执行时间内获取的数量)| ArrayList\<JStatResultForCompilation\>| 批量获取已经被JIT编译的方法 |
| run() | String[] var0(命令参数) | ArrayList\<JStatResult\> | 自定义执行jstat命令 |
# 结果对象
所有可能返回对象的继承关系结构
```java
|—— beifengtz.vmconsole.entity.JvmResult
|—— beifengtz.vmconsole.entity.jstat.JStatResult
|—— beifengtz.vmconsole.entity.jstat.JStatResultForClass
|—— beifengtz.vmconsole.entity.jstat.JStatResultForCompilation
|—— beifengtz.vmconsole.entity.jstat.JStatResultForCompiler
|—— beifengtz.vmconsole.entity.jstat.JStatResultForGc
|—— beifengtz.vmconsole.entity.jstat.JStatResultForGcCapacity
|—— beifengtz.vmconsole.entity.jstat.JStatResultForGcMetaCapacity
|—— beifengtz.vmconsole.entity.jstat.JStatResultForGcNew
|—— beifengtz.vmconsole.entity.jstat.JStatResultForGcNewCapacity
|—— beifengtz.vmconsole.entity.jstat.JStatResultForGcOld
|—— beifengtz.vmconsole.entity.jstat.JStatResultForGcOldCapacity
|—— beifengtz.vmconsole.entity.jstat.JStatResultForGcUtil
```
## JStatResult
| 属性 | 类型 | 含义 |
| --- | --- | --- |
| names | ArrayList\<String\> | 虚拟机信息列表,仅包含名字 |
| snapShot| ArrayList\<String\> | 虚拟机信息及其值列表,包含名字和对应值 |
| ~~strResult~~ | String | 未经处理的 jstat命令执行结果,**不建议使用,后续版本将去掉** |
## JStatResult各子类属性含义
参数详细讲解看我的博客:[JVM虚拟机性能监控与故障处理工具](http://blog.beifengtz.com/article/52#directory051025813848240414)
~~~
S0C:s0(from)的大小
S1C:s1(from)的大小
S0U:s0(from)已使用的空间
S1U:s1(from)已经使用的空间
EC:eden区的大小
EU:eden区已经使用的空间
OC:老年代大小
OU:老年代已经使用的空间
MC:元空间的大小(Metaspace)
MU:元空间已使用大小
CCSC:压缩类空间大小(compressed class space)
CCSU:压缩类空间已使用大小
YGC:新生代gc次数
YGCT:新生代gc耗时
FGC:Full gc次数
FGCT:Full gc耗时
GCT:gc总耗时
e:Eden区使用比例
o:老年代使用比例
m:元数据区使用比例
css:压缩使用比例
Loaded:表示载入了类的数量
Bytes:所占用空间大小
Unloaded:表示卸载类的数量
UnBytes:卸载空间大小
Time:执行时间
Size:最近编译字节码的数量
Type:最近编译方法的编译类型
Method:方法名
Compiled:表示编译任务执行的次数
Failed:表示编译失败的次数
Invalid:不可用数量
FailedType:失败的类型
FailedMethod:失败的方法
~~~