このヒープダンプを考えると
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
ますか?この場合はサイズ57412368ですか?l_name
String
更新-フォローアップの質問を追加しました:
したがって、次の各インスタンスについて考えてみましょう。
- f_nameのサイズは30です
- l_nameのサイズは20です
- 人のサイズは75です
Personのインスタンスが10個ある場合、
- 10 *(30 + 20)= 500
- 10 * 75 = 750
500はStringまたはchar[]でカウントされますか?そしてその後、750は人に数えられますか?