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

JAVA:需要计算对象大小(堆转储可用),java,jakarta-ee,memory-management,heap,Java,Jakarta Ee,Memory Management,Heap,我有一个通过Jmap获取的对象堆转储。我也通过Jhat看到了转储,但我需要计算对象的大小。我该如何做 在转储中,我可以看到:例如 类名、对象总数、总大小 com.test.app.CallRecord,219446324 如果我计算446324/2194=203,那么203字节就是1个CallRecord对象的大小,是吗?我对这里有点困惑。这个尺寸是多少。它还包括参考资料的尺寸吗 我很困惑……有人让我告诉他CallRecord对象的大小。我是否应该告诉他203字节。我怀疑它是否正确 203字节是

我有一个通过Jmap获取的对象堆转储。我也通过Jhat看到了转储,但我需要计算对象的大小。我该如何做

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

类名、对象总数、总大小

com.test.app.CallRecord,219446324

如果我计算446324/2194=203,那么203字节就是1个CallRecord对象的大小,是吗?我对这里有点困惑。这个尺寸是多少。它还包括参考资料的尺寸吗

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

203字节是否包括CallRecord对象下引用的大小

如何计算。请你想想


提前感谢。

我建议您使用某种内存分析工具(探查器)。YourKit在这方面很好,但相当昂贵,Eclipse MAT也很好,而且是免费的。VisualVM非常简单,但它足够好而且免费。。(我经常使用它们,因为它们都有另一个缺少的东西。)

这取决于总大小是shalow大小还是保留的大小

  • 浅尺寸

    对象的浅尺寸是用于存储对象本身的内存量。不考虑引用的对象

  • 保留大小

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


  • 好的,谢谢。你能告诉我如何得到这两种尺寸吗?我在网上搜索了一下,找到了OQL(对象查询语言)。我试过了,但没有成功。你能帮我吗。@VJS你可以用Eclipse MAT之类的工具获得这些尺寸