## 深入理解Java虚拟机 Chapter04

### JDK的命令行工具

名称 | 主要作用
---|------
jps | JVM Process Status Tool，显示指定系统内所有的HotSpot虚拟机进程
jstat | JVM Statistics Monitoring Tool，用于收集HotSpot虚拟机各方面的运行数据
jinfo | Configuration Info for Java，显示虚拟机配置信息
jmap | Memory Map for Java，生成虚拟机的内存转储快照（heapdump文件）
jhat | JVM Heap Dump Browser，用于分析heapdump文件，它会建立一个HTTP/HTML服务器，让用户可以在浏览器上查看分析结果
jstack | Stack Trace for Java，显示虚拟机的线程快照

#### jps
jps：虚拟机进程状况工具

`jps [options] [hostid]`

选项 | 作用
---|------
-q | 只输出LVMID，省略主类的名称
-m | 输出虚拟机进程启动时传递给main()函数的参数
-l | 输出主类的全名，如果进程执行的是Jar包，输出Jar路径
-v | 输出虚拟机进程启动时的JVM参数

#### jstat
jstat：虚拟机统计信息监视工具

`jstat [options vmid [interval[s|ms]] [count] ]`

选项 | 作用
---|------
-class | 监视类装载，卸载数量，总空间以及类装载所耗费的时间
-gc | 监视Java堆状况，包括Eden区、2个survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息
-gccapacity | 监视内容与-gc基本相同，但输出主要关注Java堆各个区域的最大和最小空间
-gcutil | 监视内容与-gc基本相同，但输出主要关注已使用空间占总空间的百分比
-gccause | 与-gcutil功能一样，但是会额外输出导致上一次GC产生的原因
-gcnew | 监视新生代GC情况
-gcnewcapacity | 监视内容与-gcnew基本相同，但输出主要关注使用到的最大和最小空间
-gcold | 监视老年代GC情况
-gcoldcapacity | 监视内容与-gcold基本相同，但输出主要关注使用到的最大和最小空间
-gcpermcapacity | 输出永久代使用到的最大和最小空间
-complier | 输出JIT 编译器编译过的方法、耗时的信息
-printcompilation | 输出已经被JIT编译的方法

#### jinfo
jinfo：Java配置信息工具

`jinfo [option] pid`

#### jmap
jmap：Java内存映像工具

`jmap [option] vmid`

选项 | 作用
---|------
-dump | 生成堆转储快照，格式为：`-dump:[live,]format=b,file=<filename>`，其中live子参数说明是否只dump出存活的对象
-finalizerinfo | 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象
-heap | 显示Java堆详细信息，如使用哪种回收器，参数配置，分代状况等
-histo | 显示堆中对象的统计信息，GC使用的算法，heap的配置及wise heap的使用情况，可以用此来判断内存目前的使用情况以及垃圾回收情况
-permstat | 已ClassLoader为统计口径显示永久代内存状态
-F | 当-dump没有响应时，强制生成dump快照

#### jhat
jhat：虚拟机堆转储快照分析工具

`jhat [option] [dumpfile]`

#### jstack
jstack：Java堆栈跟踪工具

`jstack [option] vmid`

选项 | 作用
---|------
-F | 当正常输出请求不被响应时，强制输出线程堆栈
-l | 除堆栈外，显示关于锁的附加信息
-m | 如果调用到本地方法的话，可以显示C/C++的堆栈