jmap这些工具是jdk自带的调试工具,安装完之后位于bin目录下,例如:/usr/java/jdk1.7.0_67/bin/
jmap用来查看堆内存使用状况,一般结合jhat使用。
1.jmap语法格式如下:
jmap [option] pid
jmap [option] executable core
jmap [option] [server-id@]remote-hostname-or-ip
如果运行在64位JVM上,可能需要指定-J-d64命令选项参数。
jmap -permstat pid
打印进程的类加载器和类加载器加载的持久代对象信息,输出:类加载器名称、对象是否存活(不可靠)、对象地址、父类加载器、已加载的类大小等信息
[root@bogon usr]# jmap -permstat 10424Attaching to process ID 10424, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.60-b09
finding class loader instances ..done.
computing per loader stat ..done.
please wait.. computing liveness........................done.
class_loader classes bytes parent_loader alive? type
<bootstrap> 1493 6084856 null live <internal>
0xa18d1590 1229 6218584 0xa18d15e0 live sun/misc/Launcher$AppClassLoader@0x70f65b98
0xa1a77c00 0 0 0xa18d1590 live com/alibaba/fastjson/util/ASMClassLoader@0x712b4aa8
0xa18d15e0 0 0 null live sun/misc/Launcher$ExtClassLoader@0x70f27d38
0xa1aed110 0 0 0xa18d1590 live java/util/ResourceBundle$RBClassLoader@0x7120e368
2.导出到文件:
jmap -dump:format=b,file=/usr/test33.bin 10424
3.直接显示
jmap -histo 10424
num #instances #bytes class name
----------------------------------------------
1: 34301 8999856 [B
2: 30979 3689456 <constMethodKlass>
3: 39666 3590512 [C
4: 915 3165600 [I
5: 30979 2731984 <methodKlass>
6: 2441 1457456 <constantPoolKlass>
7: 2441 995568 <instanceKlassKlass>
8: 2146 852496 <constantPoolCacheKlass>
9: 26281 630744 java.lang.String
10: 2660 323400 java.lang.Class
11: 4025 244360 [S
12: 4870 233760 java.nio.HeapByteBuffer
13: 4721 226608 java.nio.HeapCharBuffer
14: 3150 223296 [Ljava.lang.Object;
15: 8468 203232 java.util.HashMap$Entry
16: 3961 202624 [[I
17: 4322 165752 [[B
这里:
-
[C
is achar[]
-
[S
is ashort[]
-
[I
is aint[]
-
[B
is abyte[]
-
[[I
is aint[][]
constMethodKlass/ methodKlass/ constantPoolKlass/ constantPoolCacheKlass/ instanceKlassKlass/ methodDataKlass
与Classloader相关,常驻Perm区。