1

JVMでjmapを実行してメモリリークを理解しようとすると、奇妙なことがわかりました。8java.lang.Longバイトではなく24バイトを使用することです。

私の間違いはどこにあるのか教えてもらえますか?

 num     #instances         #bytes  class name
----------------------------------------------
   1:      11043837      530104176  java.util.HashMap$Entry
   2:      15788616      378926784  java.lang.Long
   3:       2933013      301617976  [C


#bytes / #instance => 378926784 / 15788616  => 24 bytes

WTF ????

4

1 に答える 1

0

OK、Java のメモリ使用量に関する知識を更新する必要がありました。

8 バイトは、長いプリミティブ型用です。

オブジェクト (java.lang.Long など) の場合、ヘッダーに 8 バイトのオーバーヘッドがあります。今; 問題の半分は解決しましたが、まだ 8 バイトが不足しています...

于 2012-10-31T20:39:31.190 に答える