jmap是一个多功能的命令。它可以生成java程序的堆dump文件,也可以查看堆内对象实例的统计信息,查看ClassLoader的信息以及Finalizer队列。
下面的命令生成PID为2500的java成粗的对象的统计信息,并输出到out.txt文件中:
[qifuguang@winwill~]$ jmap -histo 2500 > out.txt
[qifuguang@winwill~]$
[qifuguang@winwill~]$
[qifuguang@winwill~]$
[qifuguang@winwill~]$
[qifuguang@winwill~]$
生成的文件如下:
从文件中可以看到,统计信息显示了内存中实例的数量和合计。
下面的命令导出PID为2500的java程序当前的堆快照:
[qifuguang@winwill~]$ jmap -dump:format=b,file=dump.bin 2500
Dumping heap to /home/qifuguang/dump.bin ...
Heap dump file created
该命令成功地将运用程序的当前的堆快照导出到了dump.bin文件,之后可以使用Visual VM,MAT等工具分析对快照文件。
下面的命令查看虚拟机Finalizer队列的信息:
从图中可以看到,队列中堆积了大量的TestFinalizer$LY对象实例,还有其他一些对象。
下面的命令显示了虚拟机当前的ClassLoader信息:
从图中可以看到,当前虚拟机一共有3个ClassLoader,bootstrap加载了492个对象,对象总大小为943655byte,同时还显示了各个ClassLoader之间的父子关系。
原文地址:http://blog.csdn.net/winwill2012/article/details/46337339