我有一个对象HEAP转储可以通过Jmap获取。我也看到了通过Jhat的转储,但我需要计算对象的大小。我该怎么做。
在转储中我可以看到:例如
班级名称,总投放对象数,总投放量
com.test.app.CallRecord,2194,446324
所以,如果我计算446324/2194 = 203.So 203字节是1 CallRecord对象的大小。是这样吗?我在这里有一个混乱。这个大小是什么。它还包括引用的大小?
m困惑.....有人让我让他知道CallRecord对象的大小。我应该告诉他203个字节。我怀疑它是否正确。
203字节包括引用的大小也在CallRecord对象下。
如何计算。请求你的想法。
提前致谢。
答案 0 :(得分:2)
我建议你使用某种内存分析工具(profiler)。 YourKit很适合这个,但是相当昂贵,Eclipse MAT也很好,它是免费的。 VisualVM非常简单,但它足够好并且也是免费的...(我经常最终使用它们,因为它们都有一些对方缺乏的东西..)
答案 1 :(得分:2)
这取决于总尺寸是 shalow 尺寸还是保留尺寸。
浅尺寸
对象的浅层大小是用于存储对象本身的内存量。不考虑引用的对象。
保留尺寸
对象的保留大小是垃圾收集器收集对象时可以释放的内存量。