4:jmap
jmap是jdk自带的jvm内存分析的工具,位于jdk的bin目录。jdk1.6中jmap命令用法:
Usage:
jmap -histo
(to connect to running process and print histogram of java object heap
jmap -dump:
(to connect to running process and dump java heap)
dump-options:
format=b binary default
file= dump heap to
Example: jmap -dump:format=b,file=heap.bin
jmap -histo 在屏幕上显示出指定pid的jvm内存状况。以我本机为例,执行该命令,屏幕显示:
num #instances #bytes class name
----------------------------------------------
1: 24206 2791864
2: 22371 2145216 [C
3: 24206 1940648
4: 1951 1364496
5: 26543 1282560
6: 6377 1081744 [B
7: 1793 909688
8: 1471 614624
9: 14581 548336 [Ljava.lang.Object;
10: 3863 513640 [I
11: 20677 496248 java.lang.String
12: 3621 312776 [Ljava.util.HashMap$Entry;
13: 3335 266800 java.lang.reflect.Method
14: 8256 264192 java.io.ObjectStreamClass$WeakClassKey
15: 7066 226112 java.util.TreeMap$Entry
16: 2355 173304 [S
17: 1687 161952 java.lang.Class
18: 2769 150112 [[I
19: 3563 142520 java.util.HashMap
20: 5562 133488 java.util.HashMap$Entry
Total 239019 17140408
为了方便查看,我删掉了一些行。从上面的信息很容易看出,#instance指的是对象数量,#bytes指的是这些对象占用的内存大小,class name指的是对象类型。
再看jmap的dump选项,这个选项是将jvm的堆中内存信息输出到一个文件中,在我本机执行
jmap -dump:file=c:dump.txt 340