鑑於這種堆轉儲什麼是Java堆的統計數據的轉儲擊穿
size no. of obj class
515313696 2380602 char[]
75476832 614571 * ConstMethodKlass
57412368 2392182 java.lang.String
44255544 614571 * MethodKlass
33836872 70371 * ConstantPoolKlass
28034704 70371 * InstanceKlassKlass
26834392 349363 java.lang.Object[]
25853848 256925 java.util.HashMap$Entry[]
24224240 496587 * SymbolKlass
19627024 117963 byte[]
18963232 61583 * ConstantPoolCacheKlass
18373920 120113 int[]
15239352 634973 java.util.HashMap$Entry
11789056 92102 ph.com.my.class.Person
而且只有1類是從我的應用程序,ph.com.my.class.Person
。類定義如下:
public class Person {
private String f_name;
private String l_name;
}
在堆轉儲,並在Person size (11789056)
包括2個字符串變量佔用的內存?或者將f_name
和l_name
改爲在String
類中計數,在這種情況下,尺寸爲57412368?
更新 - 添加後續問題:
所以我們說的每個實例:
- f_name大小爲30
- l_name大小20
- 人大小爲75
如果有10個Person的實例,那裏有升是
- 10 *(30 + 20)= 500
- 10 * 75 = 750
請問500可以以字符串計數或燒焦[]?並且隨後,750人會被計入嗎?