jmap堆栈分析工具输出结果
num #instances #bytes class name
----------------------------------------------
1: 151093 24368528 [C
2: 145113 23392528 <constMethodKlass>
3: 69937 22736704 [B
4: 145113 18586880 <methodKlass>
5: 13508 16646760 <constantPoolKlass>
6: 13508 9815168 <instanceKlassKlass>
7: 11012 9119904 <constantPoolCacheKlass>
8: 13547 8051456 [I
9: 237926 7613632 java.util.HashMap$Entry
10: 139610 3350640 java.lang.String
11: 4042 2441672 <methodDataKlass>
12: 9018 2236304 [Ljava.util.HashMap$Entry;
13: 47662 1525184 java.util.concurrent.ConcurrentHashMap$HashEntry
14: 18235 1458800 java.lang.reflect.Method
15: 14468 1391608 java.lang.Class
16: 18306 1145928 [S
17: 21175 1088616 [[I
其中,class name列有一些很奇怪的名字:
[C
[S i
[I
[B
[[I i
它们分别对应的对象是
[C is a char[]
[S is a short[]
[I is a int[]
[B is a byte[]
[[I is a int[][]
输出堆栈往往char[]占用内存最大,往往跟String有关,String其内部使用final char[]数组来保存数据的。