以下内容来自《Java特种兵》
类型字符 | 对应类型 | 说明 |
---|---|---|
B | byte | 代表字节,但不是Byte的意思 |
Z | boolean | 代表布尔值,同样不是Boolean值 |
S | short | |
C | char | |
I | int | |
J | long | |
F | float | |
D | double | |
V | void | 没有返回值 |
LClassName; | Reference | 引用类,例如String被标识为:Ljava/lang.String; |
[ | Array Reference | 数组的引用,例如double[][]被标识为:[[D;String[]被标识为:[Ljava.lang.String; |
以上是在字节码中的规范定义。
之前用jmap命令查看java应用中的对象内容的时候,输出的一堆东西看不懂,但是对照着上面的规范之后就很清晰明了了,
1.用jps -l
java应用
[app@localhost ~]$ jps -l
17439 sun.tools.jps.Jps
31456 com.test.bootstrap.Main
[app@localhost ~]$
2.输入命令jmap -histo:live 31456|more
[app@localhost ~]$ jmap -histo:live 31456|more
num #instances #bytes class name
----------------------------------------------
1: 206707 14594424 [C
2: 69903 9904328 <constMethodKlass>
3: 69903 8959328 <methodKlass>
4: 6543 7538872 <constantPoolKlass>
5: 206312 4951488 java.lang.String
6: 6543 4829504 <instanceKlassKlass>
7: 5680 4465248 <constantPoolCacheKlass>
8: 17715 2113904 [B
9: 54203 1734496 java.lang.ref.WeakReference
10: 2882 1486608 <methodDataKlass>
11: 39774 1272768 java.util.concurrent.ConcurrentHashMap$HashEntry
12: 30530 1221200 java.util.LinkedHashMap$Entry
13: 22637 905480 java.lang.ref.SoftReference
14: 14081 788536 java.beans.MethodDescriptor
15: 21827 754632 [Ljava.lang.Object;
16: 7799 684168 [Ljava.util.HashMap$Entry;
17: 6978 682856 java.lang.Class
18: 12115 678440 java.util.LinkedHashMap
19: 28127 675048 java.beans.MethodRef
20: 8424 673920 java.lang.reflect.Method
21: 8810 577704 [S
22: 7702 561816 [I
23: 10000 530096 [[I
像以上内容的[C
、[[I
等等就能知道具体的含义了,char数组引用和int[][]引用。