JAVA:需要计算对象大小(可用堆转储)

时间:2012-09-06 09:45:31

标签: java java-ee memory-management heap

我有一个对象HEAP转储可以通过Jmap获取。我也看到了通过Jhat的转储,但我需要计算对象的大小。我该怎么做。

在转储中我可以看到:例如

班级名称,总投放对象数,总投放量

com.test.app.CallRecord,2194,446324

所以,如果我计算446324/2194 = 203.So 203字节是1 CallRecord对象的大小。是这样吗?我在这里有一个混乱。这个大小是什么。它还包括引用的大小?

m困惑.....有人让我让他知道CallRecord对象的大小。我应该告诉他203个字节。我怀疑它是否正确。

203字节包括引用的大小也在CallRecord对象下。

如何计算。请求你的想法。

提前致谢。

2 个答案:

答案 0 :(得分:2)

我建议你使用某种内存分析工具(profiler)。 YourKit很适合这个,但是相当昂贵,Eclipse MAT也很好,它是免费的。 VisualVM非常简单,但它足够好并且也是免费的...(我经常最终使用它们,因为它们都有一些对方缺乏的东西..)

答案 1 :(得分:2)

这取决于总尺寸是 shalow 尺寸还是保留尺寸。

  1. 浅尺寸

    对象的浅层大小是用于存储对象本身的内存量。不考虑引用的对象。

  2. 保留尺寸

    对象的保留大小是垃圾收集器收集对象时可以释放的内存量。