【问题标题】:How to calculate object size from a heap dump?如何从堆转储中计算对象大小?
【发布时间】:2012-08-31 02:37:13
【问题描述】:

我有一个通过 Jmap 获取的对象堆转储。我还通过 Jhat 看到了转储。我需要计算对象的大小。我该怎么做?

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

Class Name,                    total objects,          total size
com.test.app.CallRecord ,             2194       ,            446324

所以如果我计算 446324/2194 = 203。所以 203 字节是 1 个 CallRecord 对象的大小。是这样吗?我在这里有一个困惑。这个尺寸是多少?它是否也包括参考的大小?

我很困惑。有人要求我让他们知道 CallRecord 对象的大小。我应该告诉他们 203 个字节吗?不知道对不对。

203 字节是否包括引用的大小也属于 CallRecord 对象?

如何计算?

【问题讨论】:

    标签: java memory-management heap-memory


    【解决方案1】:

    我建议您使用某种内存分析工具(分析器)。 YourKit 非常适合,但价格昂贵,Eclipse MAT 也不错,而且它是免费的。 VisualVM 非常简单,但也足够好而且免费。(我经常使用所有这些,因为它们都有一些其他缺少的东西..)

    【讨论】:

      【解决方案2】:

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

      1. 浅尺寸

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

      2. 保留大小

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

      【讨论】:

      • 好的,谢谢。请告诉我如何获得这两种尺寸。我在网上搜索并找到了 OQL(对象查询语言)。我试过了,但没有成功。你能帮帮我吗?
      • @VJS 您可以使用 Eclipse MAT 等工具获得这些尺寸
      猜你喜欢
      • 1970-01-01
      • 2020-11-20
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      相关资源
      最近更新 更多